可以使用类方法中的类名属性(在一行代码中)实例化 PHP 实例吗?
Posted
技术标签:
【中文标题】可以使用类方法中的类名属性(在一行代码中)实例化 PHP 实例吗?【英文标题】:Possible to instantiate a PHP instance using a class name property from within a class method (in one line of code)? 【发布时间】: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); ?>
另外不要忘记帮助中心:***.com/help
@Rizier123 你今天很成功!干得好:D
@Darren 我尽力了,每天都好一点
@Rizier123 你做得很好,继续加油!
【参考方案1】:
调用函数而不是构造函数的代码中有一个明显的拼写错误,可以按如下方式修复:
$instance = new $this->className();
这就行了。
【讨论】:
以上是关于可以使用类方法中的类名属性(在一行代码中)实例化 PHP 实例吗?的主要内容,如果未能解决你的问题,请参考以下文章