【发布时间】:2018-03-03 05:14:30
【问题描述】:
我正在编写一个 Joomla 用户插件(Joomla 3.8 和 PHP 7.0),但在继承方面遇到了一些问题。子类可以使用以下方法访问父类的属性和方法:
$this->[propertyormethod]
但是....
<?php
defined('_JEXEC') or die;
class PlgUserMyPluginParent extends JPlugin
{
public function onUserAfterLogin($options = array())
{
$MyPluginChildObj = new MyPluginChild;
}
}
class MyPluginChild extends PlgUserMyPluginParent
{
public function __construct()
{
var_dump($this->params);
die;
}
}
在上面,当用户完成登录时,onUserAfterLogin() 方法会按预期触发。
因为$params 由 JPlugin 设置并且 PlgUserMyPluginParent 扩展了 JPlugin,所以我可以在 PlgUserMyPluginParent 类的方法中访问$params(和其他 JPlugin 属性):
$this->params
到目前为止一切顺利。但是当我使用 MyPluginChild 扩展 PlgUserMyPluginParent 时,$this->params 为空,我直接在 PlgUserMyPluginParent 中设置并尝试从 MyPluginChild 访问的任何属性也是如此。
例如,如果我在 PlgUserMyPluginParent 中声明:
public $myParentClassProperty = "somevalue";
然后尝试使用 $this->myParentClassProperty 从 MyPluginChild 访问它,它返回 null。
有人可以解释一下这里发生了什么吗?
【问题讨论】:
-
对此进行更正:public MyParentClassProperty = "somevalue";应该是 public $MyParentClassProperty = "somevalue";它实际上可以使用 $this->MyParentClassProperty 从 MyPluginChild 访问。但 $this->params 不是。