更改子类的受保护变量的值

Max*_*bre 6 php oop inheritance

我正在尝试做一些我认为非常简单的事情,但由于我在PHP中对OOP相对较新,所以我遇到了一些麻烦.

这是我的代码:

<?php
class MyClass
{
    protected $variable = 'DEFAULT';

    function __construct($newVariable)
    {
        $this->variable = $newVariable;
        echo $this->variable;
    }
}
class OtherClass extends MyClass
{
    function __construct()
    {
        echo $this->variable;
    }
}

$foo = new MyClass('MODIFIED'); // Output : MODIFIED
$bar = new OtherClass(); // Output : DEFAULT
?>
Run Code Online (Sandbox Code Playgroud)

我搜索了很多不同的线程和网站,但还没有找到我如何将$ variable的重新定义值传递给子类.有人可以指导我吗?如果有办法的话.

提前致谢.

编辑澄清脚本中实际发生的事情我遇到了这个问题:我有一个创建表单的类,在该类中有几个变量告诉我们在什么环境中的函数:如果它是多语言形式,如果我想要一个简单的形式或一个结构化的形式,这样的参数.并且这些环境变量中的一些通过其功能的执行来修改.

现在,由于我的页面的需要,我有一个专门用于创建"选择"字段的子类.它继承了主类的核心功能来创建字段等,但子类需要多个参数.事实上,我仍然希望select类从它们所处的状态继承主类的environnement参数.

当我输入它时,我意识到我接近它的方式可能不是正确的方法,因为当我查看我的代码时,我认为可能有另一种方法可以做到这一点.在我的代码中,我有两个对象,我需要它只有一个,但我真的不知道如何实际放置它.

hak*_*kre 4

您没有重新定义变量,只是在父构造函数中设置它。调用它,你就得到了你需要的东西(参见代码中的注释,只有一行):

<?php
class MyClass
{
    protected $variable = 'DEFAULT';

    function __construct($newVariable)
    {
        $this->variable = $newVariable;
        echo $this->variable;
    }
}
class OtherClass extends MyClass
{
    function __construct()
    {
        parent::__construct(); # <<--- do this
        echo $this->variable;
    }
}

$foo = new MyClass('MODIFIED'); // Output : MODIFIED
$bar = new OtherClass(); // Output : MODIFIED
?>
Run Code Online (Sandbox Code Playgroud)

即使您有两个类定义,具体实例也始终属于一个类。该类可以从父类继承,但如果您重写方法(就像对构造函数所做的那样),则不会调用父类方法,因为它已被重写。但是,使用parent关键字,您可以从子级内部访问父级的方法。