我对使用特征的想法不熟悉。我的理解是行为可以在类中水平共享。在我的项目中,以下代码在每个类的顶部重复使用。
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。'当此代码位于类结构中时,这不是问题。
由于我对特质有所了解,任何建议和指示都会受到赞赏。先感谢您。
答案 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->选项。