在 PHP 中是否可以实现类似下面的内容?
$blah = 'foo1';
class foo2 extends $blah {
//...
}
class foo1 {
//...
}
这会出错。
我想动态设置 $blah 以便我可以扩展我想要的任何类。
编辑: 之所以要这样做,是因为我想在相关类中使用另一个类中的函数。最后它会是这样的:
Final extends foo1 extends foo2 extends foo3 extends foo4 extends parent { ... }
最后我决定在类中实例化另一个类并使用它。不是最好的选择,因为他们都是你 2 个相同的类(class),但这不会经常使用,所以它现在可以使用。
最佳答案
你在这里假设 php 从上到下执行,但它并不像那样工作:
<?php
foo(); # works
function foo(){
print "bar";
}
<?php
foo(); #dies
if( $i == 1 )
{
function foo(){
print "bar";
}
}
<?php
$i = 1;
if( $i == 1 )
{
function foo(){
print "bar";
}
}
foo(); #works
现在,尽管您可以有条件地创建类:
<?php
class A { }
class B { }
if( false ){
class C extends B {
public static function bar(){
print "baz";
}
}
}
C::bar(); # dies
你不能在运行时从一个变量实例化一个:
<?php
class A { }
class B { }
$x = 'B';
if( false ){
class C extends $x {
public static function bar(){
print "baz";
}
}
}
C::bar();
---> Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING in /tmp/eg.php on line 7
有一种方法可以用 Eval 做到这一点,但你真的不想去那里:
<?php
class A { }
class B { }
$x = 'B';
if( true ){
$code =<<<EOF
class C extends $x {
public static function bar(){
print "baz";
}
}
EOF;
eval( $code );
}
C::bar();
$o = new C;
if ( $o instanceof $x )
{
print "WIN!\n";
}
--->barWIN!
不过,这里还有一个更重要的问题:
你到底为什么想要在运行时扩展一个不同的类
任何使用您的代码的人都会想压制您并为此鞭打您。
(或者,如果您喜欢鞭打,请使用 eval 技巧)
关于php - PHP 中的可变变量类扩展——可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/304509/