2009-07-18 3 views
0

Я пытаюсь сделать класс из переменной-члена, как это:синтаксис PHP: построение класса от члена переменной

<? 
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

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

$myClass = new $this->to_construct; 
+0

Спасибо, я думал, что мне нужно поставить скобку, чтобы показать, что это функция. Есть ли способ сделать это, не сохраняя имя локального класса, если вам нужно передать параметры конструктору? – Craig

+0

Это не функция. Я не уверен, как вы будете делать то, что вам нужно на PHP. – jkeys

2

Вы используете 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. Если вы хотите передать его функции, вам нужно сначала сохранить ее в локальном var.

0

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

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

Смежные вопросы