Intereting Posts

Создание экземпляра класса PHP со строкой

У меня есть два класса:

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()