2013-05-31 2 views
0

1) Можно ли сохранить ссылку на абстрактный класс в переменную следующим образом:PHP магазин ссылка на абстрактный класс в переменной

abstract class A implements X {} 

$A = A; //This doesn't work 

2) В конце концов, я хочу, чтобы иметь возможность передать ссылку на абстрактный класс к методу или функции.

class Y { public function __construct(X $X){} } 

$Y = new Y($A); 

Было бы даже удовлетворительным, чтобы иметь возможность сделать что-то вроде этого:

abstract class A { public static $staticProperty; } 

class Y { 
    public function __construct($X){ 
     echo $X::$staticProperty; //Doesn't work 
    } 
} 

$Y = new Y('A'); 
+0

Erm. Могу ли я спросить о том, что вы собираетесь делать с этим _reference_? – raina77ow

+0

Доступ к его свойствам –

+0

Было бы достаточно, если бы я мог ссылаться на абстрактный класс из переменной. '$ var = 'abstractClassName'; $ var :: $ staticProp' не работает. Я обновлю вопрос. –

ответ

1

Как вы не можете создать экземпляр абстрактного класса, вы ограничены работать со статическими свойствами (и констант), только , А так как PHP 5.3, вы можете использовать переменные, чтобы указать запрашиваемый класс, с only restriction:

В РНР 5.3.0, можно ссылаться на класс, используя переменную. Значение переменной не может быть ключевым словом (например, self, parent и статическим).

Таким образом, вы можете передать вместо него имя класса; он будет работать как якорь для абстрактного класса. Например, (demo):

abstract class Foo { static $bar = 5; } 
abstract class Bah { static $bar = 6; } 

function echoBar($classname) { 
    echo $classname::$bar; 
} 

echoBar('Foo'); // 5 
echoBar('Bah'); // 6 
Смежные вопросы