在php手册示例http://php.net/manual/en/language.oop5.visibility.php#example-242里面说
我们可以重新声明 public 和 protected 方法,但不能重新声明私有方法
他们是什么意思我可能没有得到如何正确使用继承但说我们有这个代码。
class MyClass1 {
public $public = 'Public 1';
protected $protected = 'Protected 1';
private $private = 'Private 1';
function printHello1() {
echo $this->public . " MyClass1 ". PHP_EOL;
echo $this->protected . " MyClass1 " . PHP_EOL;
echo $this->private . " MyClass1 " . PHP_EOL;
}
}
class MyClass2 extends MyClass1 {
public $public = 'Public 2';
protected $protected = 'Protected 2';
private $private = 'Private 2';
function printHello2() {
echo $this->public . " MyClass2 ". PHP_EOL;
echo $this->protected . " MyClass2 " . PHP_EOL;
echo $this->private . " MyClass2 " . PHP_EOL;
}
}
$obj2 = new MyClass2();
$obj2->printHello1();
$obj2->printHello2();
将返回
Public 2 MyClass1
Protected 2 MyClass1
Private 1 MyClass1
Public 2 MyClass2
Protected 2 MyClass2
Private 2 MyClass2
似乎我能够毫无问题地创建另一个$private
变量,那么为什么他们说我们不能呢?MyClass2
是的,当我在父类中使用函数时,它不会更改$private
变量,但是当我在子类中运行时,它确实显示了变量的新值。MyClass1
printHello1()
printHello2()
MyClass2
$private
现在我的问题是这种不好的做法:
- 覆盖/重新声明子类中的私有属性函数?
- 当父类中已经有一个函数时,在子类中创建第二个函数
printHello2()
,这会使代码有点意大利面,不是吗? - 相同的逻辑适用于私有方法对吗?