Мне было интересно, можно ли создать функцию и передать ей имя класса. Затем функция проверяет, существует ли экземпляр класса в данный момент, если он не создает экземпляр класса. Кроме того, если возможно, сделайте эту переменную глобальной и потребуйте ее возврата. Я понимаю, что возвращение может быть единственным вариантом.
function ($class_name) { // Check if Exists // __autoload will automatically include the file // If it does not create a variable where the say '$people = new people();' $class_name = new $class_name(); // Then if possible make this variable a globally accessible var. }
Возможно ли это, или я сумасшедший?
eval
– это единственный способ сделать это. Очень важно убедиться, что это не предусмотрено вводом пользователя, например, из значений $_GET
или $_POST
.
function create_or_return($class_name) { if(! class_exists($class_name)) { eval("class $class_name { }"); // put it in the global scope $GLOBALS[$class_name] = new $class_name; } } create_or_return("Hello"); var_dump($GLOBALS['Hello']); /* class Hello#1 (0) { } */
Вы не можете сделать его глобально доступным, потому что PHP не имеет глобального объекта, такого как javascript. Но вы не можете просто сделать контейнер, держащий объект.
PHP имеет функцию, называемую class_exists ($ class_name), возвращает bool.
Что-то вроде:
function some_fumction($class_name) { if(class_exists($class_name)) { return new $class_name; } else { throw new Exception("The class $class_name does not exist"); } }