PHP中的扩展继承



在C#中开发时,您有许多使用相同准确代码的类,您可以依靠另一个类来容纳通用信息,从而更容易修改这些类。

我想知道PHP中是否有类似的东西?

class Dog extends Animal {
    private $animalManager
    public function __construct(AnimalManager $animalManager) { 
        $this->animalManager = $animalManager;
    }
}
class Cat extends Animal {
    private $animalManager
    public function __construct(AnimalManager $animalManager) { 
        $this->animalManager = $animalManager;
    }
}
class Fish extends Animal {
    private $animalManager
    public function __construct(AnimalManager $animalManager) { 
        $this->animalManager = $animalManager;
    }
}
class Animal { 
    // Nothing, yet...
}

c#允许您做的是,将$ AnimalManager和构造函数分配在"动物"类中以某种方式存储在"动物"类中,如果您需要更改它,则可以在1个位置保持恒定。

事实是,php非常整洁。每个扩展class extended class 中继承了所有内容。这意味着父母的(在这种情况下为animal(构造时,每当您调用一个扩展类之一。

但是,当您在孩子中调用__construct()时,您会覆盖父母的课程。因此,您需要专门致电parent::__construct()来运行父构建器。

class Animal {
    //Private vars can't be directly accessed by children.
    //You'd have to create a function in the parent return it.
    public $animalManager
    //This function will automatically be called if you leave the
    //constructor out of the extended class
    public function __construct($animalManager) { 
        $this->animalManager = $animalManager;
    }
    //If you want $animalManager to be private
    //Call like $fish->getAnimalManager();
    //Though I do not see the use of this.
    public function getAnimalManager(){
      return $this->animalManager
    }
}
class Fish extends Animal {
     //You do not need to do this if you leave the construct out of this class
    public function __construct($animalManager) {
        parent::__construct($animalManager);
        //Do whatever you like here
    }
}

仅带有父构建体的示例:

class Fish extends Animal {
  //The parent's constructor is called automatically as it's not
  //Being overwritten by this class
  public function test(){
    var_dump($this->animalManager);
  }
}

请注意,您也不需要单独启动父级。只要这样称呼它;

$fish = new Fish(myAnimalManager);
$am = $fish->animalManager;
echo $am;

Ben Scholzen在此添加了草稿。

,但我只能看到类型参数,没有通配符。它支持通用功能和通用构造函数。它还支持界限。

与c#和java不同,PHP将具有其类型参数完全置换,这意味着我们可以反思地知道所需函数/构造函数的运行时间参数。

向后的兼容性在这里不是问题,因为类型参数和原始类型永远不可能兼容。因此,旧版代码与仿制药不会兼容。

相关内容

  • 没有找到相关文章

最新更新