子类的子项中没有JPlugin属性

问题描述 投票:0回答:1

我正在写一个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为null,我在PlgUserMyPluginParent中直接设置并尝试从MyPluginChild访问的任何属性也是如此。

例如,如果我在PlgUserMyPluginParent中声明:

public $myParentClassProperty = "somevalue";

然后尝试使用$this->myParentClassProperty从MyPluginChild访问它,它返回null

有人可以对这里发生的事情有所了解吗?

plugins joomla php-7
1个回答
0
投票

您禁止使用构造函数初始化插件。如果在子类中使用构造函数,则应始终显式调用父构造函数。

class MyPluginChild extends PlgUserMyPluginParent
{   
    /**
     * Constructor
     *
     * @param   object $subject  The object to observe
     * @param   array  $config   An optional associative array of configuration settings.
     *                           Recognized key values include 'name', 'group', 'params', 'language'
     *                           (this list is not meant to be comprehensive).
     */
    public function __construct($subject, $config = [])
    {
        parent::construct($subject, $config);

        var_dump($this->params);
        die;    
    }
}

然后JPlugin的构造函数有机会填充$params

© www.soinside.com 2019 - 2024. All rights reserved.