【问题标题】:PHP inheritance: how to access child property from inherited parent's method? [duplicate]PHP继承:如何从继承的父方法访问子属性? [复制]
【发布时间】:2021-05-07 00:38:25
【问题描述】:

例如:

<?php 

class animal {  
  private $property = "animal";
  public function whoami() {
    return "I am an " . $this->property . ".\n";
  }
}

class emu extends animal {
  private $property = "emu";
}

$emu = new emu;
echo $emu->whoami(); // "I am an animal" 

上面的代码会报告“我是一只动物”,但我希望它报告“我是一只鸸鹋”,而不需要重写 whoami() 方法。

有没有办法在 PHP 中做到这一点?

【问题讨论】:

  • private 属性只能由定义该属性的类访问。我认为protected 是您在这里所追求的。见php.net/manual/en/language.oop5.visibility.php
  • 是的,就是这样,谢谢@cOle2 - 公共财产也可以工作,但它当然是公共的。
  • 处理继承时的一般经验法则:如果父类和子类都有同名的私有属性或方法,那么它应该是私有的.它应该受到保护。

标签: php oop inheritance


【解决方案1】:

您可以创建 getter 和 setter 来访问和修改属性。一种解决方案是:

 class animal {  
  private $property;

  public function getAnimal() {
      return $this->property;
  }

  public function setAnimal($animal) {
    $this->property = $animal;
  }

  public function whoami() {
    return "I am an " . $this->getAnimal() . ".\n";
  }
}

class emu extends animal {
    public function __construct() {
        parent::setAnimal("Emu");
    }
}

$emu = new emu();
echo $emu->whoami(); 

【讨论】:

    【解决方案2】:

    @cOle2 在上面的评论中回答:

    私有属性只能由定义该属性的类访问。我认为受保护的是你在这里所追求的。见php.net/manual/en/language.oop5.visibility.php

    【讨论】:

      猜你喜欢
      • 2011-04-30
      • 2014-11-10
      • 1970-01-01
      • 2019-11-27
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      相关资源
      最近更新 更多