У меня есть два класса:
class ClassOne { }
и class ClassTwo {}
. Я получаю строку, которая может быть либо «Один», либо «Два». Вместо использования длинного оператора switch, такого как:
switch($str) { case "One": return new ClassOne(); case "Two": return new ClassTwo(); }
Есть ли способ создать экземпляр, используя строку, то есть new Class("Class" . $str);
Благодаря,
Joel
Да, ты можешь!
$str = "One"; $class = "Class".$str; $object = new $class();
Другие интересные вещи, которые вы можете сделать в php:
Переменные переменные :
$personCount = 123; $varname = 'personCount'; echo $$varname; // echo's 123
И переменные функции и методы.
$func = 'my_function'; $func('param1'); // calls my_function('param1'); $method = 'doStuff'; $object = new MyClass(); $object->$method(); // calls the MyClass->doStuff() method.
Вы можете просто использовать следующий синтаксис для создания нового класса (это удобно, если вы создаете фабрику ):
$className = $whatever; $object = new $className;
В качестве (исключительно грубого) примера заводского метода:
public function &factory($className) { require_once($className.'php'); if(class_exists($className)) return new $className; die('Cannot create new "'.$className.'" class - includes not found or class unavailable.'); }
взгляните на пример 3 с http://www.php.net/manual/en/language.oop5.basic.php
$className = 'Foo'; $instance = new $className(); // Foo()