Синтаксис PHP: создание класса из переменной-члена - PullRequest
0 голосов
/ 18 июля 2009

Я пытаюсь сделать класс из переменной-члена следующим образом:

<?
class A{
    private $to_construct = 'B'; 
    function make_class(){
        // code to make class goes here
    }

}

class B{
    function __construct(){
        echo 'class constructed';
    }
}

$myA = new A();
$myA->make_class();
?>

Я пытался использовать:

 $myClass = new $this->to_construct();

и

$myClass = new {$this->to_construct}();

но ни сработало. Я закончил тем, что сделал это:

$constructor = $this->to_construct;
$myClass = new $constructor(); 

Кажется, должен быть способ сделать это без сохранения имени класса в локальной переменной. Я что-то упустил?

Ответы [ 3 ]

3 голосов
/ 18 июля 2009

Вы пробовали это?

 $myClass = new $this->to_construct;
2 голосов
/ 18 июля 2009

Вы используете PHP 4 или что-то? На 5.2.9 $myClass = new $this->to_construct(); работает отлично.

В конце концов, это то, с чем вам придется жить, с помощью PHP. Синтаксис и семантика PHP ОЧЕНЬ противоречивы. Например, массив доступа к результату вызова является синтаксической ошибкой:

function foo() {
  return array("foo","bar");
}
echo $foo()[0];

Любой другой язык может сделать это, но PHP не может. Иногда вам просто нужно хранить значения в локальных переменных.

То же самое верно для func_get_args() в старых версиях PHP. Если вы хотите передать его функции, вам сначала нужно сохранить его в локальной переменной.

0 голосов
/ 18 июля 2009

Если я читаю хорошо между строк, вы пытаетесь сделать что-то вроде этого. Правильно?

class createObject{
    function __construct($class){
        $this->$class=new $class;
    }

}

class B{
    function __construct(){
        echo 'class B constructed<br>';
    }
    function sayHi(){
        echo 'Hi I am class: '.get_class();
    }
}

class C{
    function __construct(){
        echo 'class C constructed<br>';
    }
    function sayHi(){
        echo 'Hi I am class: '.get_class();
    }
}
$wantedClass='B';
$finalObject = new createObject($wantedClass);
$finalObject->$wantedClass->sayHi();

-
Dam

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...