【发布时间】:2015-10-07 17:09:30
【问题描述】:
我试图弄清楚如何即时导入大量 PHP 类函数。比如……
class Entity
{
public function __construct($type)
{
require_once $type."_functions.php"
}
// ...
}
$person = new Entity("human");
$person->sayhi();
$cow = new Entity("cow");
$cow->sayhi();
human_functions.php:
class Entity redefines Entity
{
public function sayhi()
{
echo "Hello world!";
}
}
cow_functions.php:
class Entity redefines Entity
{
public function sayhi()
{
echo "Moo!";
}
}
我发现了一些可能性,例如classkit_method_redefine() 和runkit_method_redefine()(它们是“实验性的”,无论如何它们都无法修改当前正在运行的类)。我现在使用的是 PHP 5.3.3,所以我不能使用Traits(不确定这是否是我正在寻找的东西)。我已经成功地重新定义了处理程序变量,如下所示:
// Example 2:
class OtherEntity { /* Code Here */ }
class Entity
{
public function __construct($type)
{
global $foo;
unset($foo);
$foo = new OtherEntity();
}
}
$foo = new Entity();
但是,这感觉就像一个 非常 hacky 方法。更重要的是,如果我不命名类$foo 的每个 实例,那么它将不起作用。我正在尝试做的事情有什么解决方法吗?
注意:我知道我可以扩展一个类,但在我的情况下,当启动 Entity 类时,没有安全的方法可以提前知道它需要启动哪个子类和。或许有一种方法我可以写,比如:
public function changeClass
{
this->class = OtherEntity;
}
感谢您的帮助!
【问题讨论】:
-
对于您的实际问题,肯定有另一种解决方案。您的第一个示例建议使用 factory pattern,但我不确定您真正想要实现的目标。
-
是的,您做出了一些需要重新考虑的设计选择。
-
是
redefine一个实际的 php 函数。我相信你在找extends -
@CodeGodie 不,它不是,它是为了示例目的
-
我能理解。接受的答案非常适合这种情况。 :)