【问题标题】:How to change parent property value如何更改父属性值
【发布时间】:2017-12-26 09:22:45
【问题描述】:

我有一个父类 Base

abstract class Base
 {
    protected $prop1 = null;

    protected $prop2 = null;
 }

并且在子类中我想改变这两个属性

class Child extends Base
 {


    public function method1($val1, $val2)
    {
        $this->prop1 = $val1;
        $this->prop2 = $val2;
    }

    public function method2()
    {
        echo prop1;
        echo prop2;
    }

 }

在调用子类的第一个方法之后和调用子类的第二个方法之后,有什么方法可以获取更改的值?我尝试这样做,但在这个示例中我没有改变值,因为它们是空值。

【问题讨论】:

  • $this->prop1 语法既适用于书写 也适用于 阅读。 prop1 将是一个常量,如 define('prop1', 'foo');
  • 你做得对,但在两者中都调用$this->your properties
  • 对不起,我的错误是我忘记在我的问题中写 $this。我创建了一个对象 $child = new Child() 并在调用第一个方法后我调用了第二个但第二个方法打印 null 但我想打印在 method1 中更改的值

标签: php oop extends


【解决方案1】:

在子类 method2 中,您指的不是实际属性。 使用$ 否则php 会将其理解为constant

<?php

     abstract class Base
     {
        protected $prop1 = null;

        protected $prop2 = null;
     }

     class Child extends Base
     {

        public function method1($val1, $val2)
        {
            $this->prop1 = $val1;
            $this->prop2 = $val2;
        }

        public function method2()
        {
            echo $this->prop1; 
            echo $this->prop2;
        }

     }

     $child = new Child();
     $child->method1(30, "ABC");
     $child->method2(); //will show 30ABC

    ?>

【讨论】:

  • 对不起,我的错误是我忘了在我的问题中写 $this
  • 我创建一个对象 $child = new Child() 并在调用第一个方法后我调用第二个但第二个方法打印 null
  • $child = new Child(); $child-&gt;method1(30, "ABC"); $child-&gt;method2(); 工作正常
  • 但是我在调​​用method2之前调用了method1来改变它们
  • 查看完整代码。仔细检查您是否有其他线路造成问题。
【解决方案2】:

使用$this-&gt;prop1 读取prop1 属性:

class Child extends Base{

    public function method1 ($val1, $val2) {
        $this->prop1 = $val1;
        $this->prop2 = $val2;
    }

    public function method2 () {
        echo $this->prop1;
        echo $this->prop2;
    }

}

docs 中了解 PHP 中的 OOP。

【讨论】:

  • 对不起,我的错误是我忘记在我的问题中写 $this。我创建了一个对象 $child = new Child() 并在调用第一个方法后我调用了第二个但第二个方法打印 null 但我想打印在方法中更改的值
【解决方案3】:

您必须将 prop1 和 prop2 作为类属性处理。因此-对象范围/上下文-您必须编写代码(无论何时读取/写入它们的值),就像您在 method1() 中所做的那样:

public function method2() {
    echo $this->prop1;
}

【讨论】:

  • 对不起,我的错误是我忘记在我的问题中写 $this。我创建了一个对象 $child = new Child() 并在调用第一个方法后我调用了第二个但第二个方法打印 null 但我想打印在方法中更改的值
  • 我已经测试了你的代码,它运行良好!见这里:sandbox.onlinephpfunctions.com/code/…
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 2017-09-07
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多