在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将具有其类型参数完全置换,这意味着我们可以反思地知道所需函数/构造函数的运行时间参数。
向后的兼容性在这里不是问题,因为类型参数和原始类型永远不可能兼容。因此,旧版代码与仿制药不会兼容。