【发布时间】:2015-04-17 15:29:40
【问题描述】:
我希望能够使用存储在另一个类的属性中的类名来实例化一个类,并且我想用一行代码来做到这一点,就像下面代码中的 cmets 一样(它应该可以在至少一个最新版本的 PHP 5)。这可能吗?
<?php
class Foo {
public function doFoo() {
echo "foo\n";
}
}
class Bar {
function __construct($className) {
$this->className = $className;
}
public function doBar() {
//INSTEAD OF THESE TWO LINES...
//$className = $this->className;
//$instance = new $className();
//I WOULD LIKE THIS (OR SOME OTHER) ONE-LINER TO WORK:
$instance = $this->className();
$instance->doFoo();
}
}
$bar = new Bar('Foo');
$bar->doBar();
预期输出:
foo
【问题讨论】:
-
您只是忘记了关键字
new,例如$instance = new $this->className();(如您所愿,它适用于 PHP 版本 +5.0,请参阅:3v4l.org/H3O7X)您当前的代码将是:$instance = Foo();,它只是调用函数 Foo -
另外,在你问下 3 个拼写错误或 php 版本错误的问题之前,我只能向你推荐一个快速的 google 和 SO search + 一些基本调试,顶部有错误报告您的文件:
<?php ini_set("display_errors", 1); error_reporting(E_ALL); ?>另外不要忘记帮助中心:stackoverflow.com/help -
@Rizier123 你今天很成功!干得好:D
-
@Darren 我尽力了,每天都好一点
-
@Rizier123 你做得很好,继续加油!
标签: php constructor instantiation classname