php - PHP 中的可变变量类扩展——可能吗?

标签 php class object variable-variables

在 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/

相关文章:

javascript - 将 PHP 中的正则表达式转换为 javascript

php - 将 raphaeljs 导出为带有路径背景作为图像的 jpg 时出错

php - Magento - 修改核心数据库

html - 在 CSS 和 HTML 中命名 ID 和类的最佳方式是什么?

javascript - 对对象数组中的两个值求和,然后插入到另一个对象数组中

python - Django:查询设置多个条件或收集到新对象

PHP HTML 表 - 用于填充下一页表的数据库元素的 href 链接

html - 如何从 CSS 中删除悬停效果?

python - 我们如何确定属性属于实例还是类?

javascript - 数组数组转换为对象数组