【问题标题】:Possible to instantiate a PHP instance using a class name property from within a class method (in one line of code)?可以使用类方法中的类名属性(在一行代码中)实例化 PHP 实例吗?
【发布时间】: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-&gt;className();(如您所愿,它适用于 PHP 版本 +5.0,请参阅:3v4l.org/H3O7X)您当前的代码将是:$instance = Foo();,它只是调用函数 Foo
  • 另外,在你问下 3 个拼写错误或 php 版本错误的问题之前,我只能向你推荐一个快速的 googleSO search + 一些基本调试,顶部有错误报告您的文件:&lt;?php ini_set("display_errors", 1); error_reporting(E_ALL); ?&gt; 另外不要忘记帮助中心:stackoverflow.com/help
  • @Rizier123 你今天很成功!干得好:D
  • @Darren 我尽力了,每天都好一点
  • @Rizier123 你做得很好,继续加油!

标签: php constructor instantiation classname


【解决方案1】:

调用函数而不是构造函数的代码中有一个明显的拼写错误,可以按如下方式修复:

$instance = new $this->className();

这就行了。

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多