Как объявить функцию класса вне класса или внутри __construct()? Интересует такая задача:
Есть некий класс, который будет каждый раз модифицироваться. И чтобы было легко это сделать, решил разделить функции класса по разным папкам.config (главная папка)
-- link (папка функции для работы с link)
-- title (папка функции для работы с title)
и т.д.
При помощи цикла, который находится в __construct() или можно вне самого класса, подгружаю каждый файл. Но я не знаю, как объявить функцию для это класса, чтобы сработал этот код:Class config {
function __construct(){
// здесь подгружаются файлы
}
}
// или подгружать здесь
$config = new config();
$config->getLink('protocol');
Как это можно реализовать? Если есть альтернативы, то рад узнать. Главное, чтобы все функции из разных файлов работали при помощи одной переменной, вроде $config;

21 Авг 2019 в 07:05
211 +1
1
Ответы
1

Для реализации подгрузки функций из разных файлов и объявления их для использования внутри класса можно воспользоваться магическим методом __call(). Этот метод срабатывает, когда вызывается метод объекта, который не был объявлен в классе.

Например, в вашем случае можно создать класс config и в методе __construct() подгрузить все необходимые файлы с функциями из разных папок. После этого, когда вы вызываете метод, который не объявлен в классе, он будет автоматически искать соответствующую функцию из подгруженных файлов и вызывать её.

Пример реализации:

class config {
public function __construct(){
// Подгрузка всех файлов с функциями из разных папок
$files = glob('link/*.php');
foreach($files as $file) {
include $file;
}
$files = glob('title/*.php');
foreach($files as $file) {
include $file;
}
}
public function __call($method, $arguments){
// Поиск функции с нужным именем
$functionName = $method;
if(function_exists($functionName)){
return call_user_func_array($functionName, $arguments);
} else {
throw new Exception("Method $method not found");
}
}
}
$config = new config();
$config->getLink('protocol');

В данном примере, при вызове метода getLink('protocol'), он будет автоматически искать функцию getLink('protocol') в загруженных файлах и вызывать её. В случае, если такой функции не будет найдено, будет выброшено исключение.

Это позволит вам добавлять новые функции в разные файлы и использовать их внутри класса config, не изменяя его код.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир