特征构造函数中的未定义变量

时间:2017-10-21 15:57:52

标签: php traits

我对使用特征的想法不熟悉。我的理解是行为可以在类中水平共享。在我的项目中,以下代码在每个类的顶部重复使用。

class Loader {

    protected $options;

    /**
    * Loader constructor.
    */
    public function __construct() {
        $this->options = get_option( 'xenword_options' );
        $this->init();
    }

由于这是在几十个课程中完成的,建立一个特质是一个很好的追求方向吗?

这是我失败的尝试。创建了一个名为Options.php的文件。内容如下:

trait getOptions {
    public $options;

    public function __construct() {
        $this->$options = get_option('xenword_options');
    }
}

不幸的是,PhpStorm给出了一条消息Undefined variable' options。'当此代码位于类结构中时,这不是问题。

由于我对特质有所了解,任何建议和指示都会受到赞赏。先感谢您。

2 个答案:

答案 0 :(得分:2)

你快到了。

@SignpostMarv正好位于$this->$option错误的部分,不是因为它是语法错误,而是因为$存在拼写错误,应该是->options不是->$options(您可以查看http://sandbox.onlinephpfunctions.com/code/3a40de64bb87d8838b5368dd6fe69d128603c37b)。

现在你有这个特性,你必须把它包含在课程中

class Loader {
    use starter;
}

trait starter {
    protected $options;

    public function __construct() {
        $this->options = 'xenword_options';
        $this->init();
    }

    public function init() {
      $myClass = __CLASS__;
      echo "{$myClass} started";
    }
}

要测试它,只需执行new Loader()即可查看该消息。 (检查:http://sandbox.onlinephpfunctions.com/code/55b517142fb8d74b8b5a3e2246c79b6428330297

答案 1 :(得分:0)

$ this-> $ options是语法错误。

你想要$ this->选项。