Как реализовать расширение классов библиотеки? Фреймворк Kohana имеет следующий механизм расширения классов: Основной файл, содержащий код класса, kohana/classes/Kohana_Test.php:class Kohana_Test { public function __construct() { echo 'kohana/classes/Kohana_Test.php'; } } Переопределенный в приложении класс, app/classes/Test.php:class Test extends Kohana_Test { public function __construct() { echo 'app/classes/Test.php'; } } Класс - "пустышка", используется когда класс не переопределен, kohana/classes/Test.php:class Test extends Kohana_Test { } Такой подход позволяет изменять класс Test без лишних правок в файлах использующих его:$obj = new Test; // 'app/classes/Test.php' Есть ли аналоги для данного механизма, позволяющие избавиться от классов - "пустышек"? Как добиться подобного эффекта при использовании например фреймворка Zend?
В фреймворке Zend Framework можно достичь подобного эффекта с помощью функции spl_autoload_register() для подключения автозагрузчика классов. Например, вы можете создать автозагрузчик, который будет искать классы в определенных директориях, и если класс не найден в приложении, он будет загружать его из библиотеки.
Пример автозагрузчика для Zend Framework:
function my_autoloader($class) { if (file_exists('app/classes/' . $class . '.php')) { include 'app/classes/' . $class . '.php'; } elseif (file_exists('kohana/classes/' . $class . '.php')) { include 'kohana/classes/' . $class . '.php'; } } spl_autoload_register('my_autoloader'); $obj = new Test; // если класс Test не переопределен в приложении, будет загружен из kohana/classes/Test.php
Таким образом, вы можете использовать автозагрузчик для загрузки классов из различных директорий в зависимости от условий, что позволит избежать создания "пустышек" классов.
В фреймворке Zend Framework можно достичь подобного эффекта с помощью функции spl_autoload_register() для подключения автозагрузчика классов. Например, вы можете создать автозагрузчик, который будет искать классы в определенных директориях, и если класс не найден в приложении, он будет загружать его из библиотеки.
Пример автозагрузчика для Zend Framework:
function my_autoloader($class) {if (file_exists('app/classes/' . $class . '.php')) {
include 'app/classes/' . $class . '.php';
} elseif (file_exists('kohana/classes/' . $class . '.php')) {
include 'kohana/classes/' . $class . '.php';
}
}
spl_autoload_register('my_autoloader');
$obj = new Test; // если класс Test не переопределен в приложении, будет загружен из kohana/classes/Test.php
Таким образом, вы можете использовать автозагрузчик для загрузки классов из различных директорий в зависимости от условий, что позволит избежать создания "пустышек" классов.