Не знаю, возможно ли то, что я хочу, но я работаю над приложением, которому требуются пользовательские классы для переопределения основных функций, если эти файлы существуют.
Так, в качестве примера, это моя текущая файловая структура (упрощенная, без 'customer_slug')
Теперь я хочу проверить, существует ли «custom / User.php», и, соответственно, включить и использовать это. Следует расширить основной (абстрактный) класс пользователя.
Мой скрипт "entry" сейчас выглядит так:
<?php
function __autoload($class_name) {
$dispatch = Dispatcher::getInstance();
$dispatch->get($class_name);
}
class Dispatcher {
private static $instance;
private static $customer_slug = 'sony';
private function __clone() {
// Empty magic function to prevent cloning
}
private function __construct() {
// Empty magic function to prevent initialization
}
public static function getInstance()
{
if (!isset(self::$instance)) {
$class = __CLASS__;
self::$instance = new $class;
}
return self::$instance;
}
public static function get($class) {
// Autoload class
$basepath = $class.'.php';
// Include bas class
include('core/'.$basepath);
// Do we have custom functionality
if (file_exists('custom/'.self::$customer_slug.'/'.$basepath)) {
include('custom/'.self::$customer_slug.'/'.$basepath);
}
}
}
$User = new User;
print_r($User);
?>
Я пытался поиграться с пространствами имен, но не могу заставить его работать. Я хотел бы продолжать говорить «$ user = new User;». Не знаю, как еще я мог бы назвать класс, возможно, $ user = new $ custom_or_code_classname
Так что я открыт и для других подходов. Может, система крючков?