色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php protected 覆蓋

林國瑞1年前6瀏覽0評論
PHP是一種流行的腳本語言,它支持多種訪問控制修飾符,包括public、protected和private。本文將重點講解PHP中的protected修飾符及其覆蓋方法。因為protected是一種限制訪問的訪問修飾符,也就是說只有類及其子類的方法才能調用該成員,定義成員后,我們可以利用繼承來覆蓋它的實現方式。下面我們通過舉例來說明。
class Ancestor {
protected $property = 'Hello World';
<br>
   public function getProperty(){
echo $this->property . "\n";
}
}
<br>
class Descendant1 extends Ancestor{
public function getProperty(){
echo "I am Descendant1\n";
echo $this->property . "\n";
}
}
<br>
class Descendant2 extends Ancestor{
public function getProperty(){
echo "I am Descendant2\n";
Ancestor::getProperty();
}
}
<br>
$ancestor = new Ancestor();
$descendant1 = new Descendant1();
$descendant2 = new Descendant2();
<br>
$ancestor->getProperty(); // 輸出:Hello World
$descendant1->getProperty(); // 輸出:I am Descendant1 和 Hello World
$descendant2->getProperty(); // 輸出:I am Descendant2 和 Hello World

在上面的例子中,我們創建了一個Ancestor類,它具有一個protected屬性$property和一個公共方法getProperty。然后,我們分別創建了兩個子類Descendant1和Descendant2,它們都繼承了Ancestor的屬性和方法。但是,它們分別覆蓋了getProperty的實現方式,我們可以看到它們都調用了父類的getProperty方法,只不過輸出內容的前綴不同:Descendant1輸出“I am Descendant1”,而Descendant2輸出“I am Descendant2”。
這個例子很好地說明了protected屬性和方法的覆蓋方法,也就是在子類中重新定義成員時,必須使用相同的訪問控制修飾符。如果重新定義的成員沒有指定修飾符,則默認使用子類中定義的修飾符。
在實際的應用中,我們經常需要使用protected屬性和方法來保護類的內部實現細節,而又需要讓子類能夠訪問和修改這些屬性和方法。在這種情況下,覆蓋protected屬性和方法就成為了一種非常有用的技巧。
class Person{
protected $name;
protected $age;
<br>
    public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
<br>
    public function getName(){
return $this->name;
}
<br>
    public function setName($name){
$this->name = $name;
}
<br>
    public function getAge(){
return $this->age;
}
<br>
    public function setAge($age){
$this->age = $age;
}
}
<br>
class Student extends Person{
private $score;
<br>
    public function __construct($name,$age,$score){
parent::__construct($name,$age);
$this->score = $score;
}
<br>
    public function getScore(){
return $this->score;
}
<br>
    public function setScore($score){
$this->score = $score;
}
<br>
    public function showInfo(){
echo "My name is " . parent::getName() . ", I'm " . parent::getAge() . " years old, and my score is " . $this->score . ".\n";
}
}
<br>
$student = new Student("Tom", 18, 80);
echo $student->getName() . "\n";
echo $student->getAge() . "\n";
echo $student->getScore() . "\n";
$student->showInfo();

上面的例子展示了protected屬性在子類中的覆蓋應用。我們在Person類中定義了兩個protected屬性$name和$age,并提供了一些公共方法來訪問和修改這些屬性。然后,我們創建了一個Student類,它繼承了Person的屬性和方法,并定義了一個private屬性$score來存儲學生成績。在構造方法中,我們調用了父類的構造方法來初始化$name和$age屬性。然后,我們通過子類中的公共方法來訪問$name和$age屬性,并通過子類中的私有方法來訪問$score屬性。最后,我們定義了一個showInfo方法,它調用了父類中的getName和getAge方法,并輸出了學生的姓名、年齡和成績。
這個例子展示了protected屬性的另一個用途,即在子類中修改父類屬性的值。我們可以通過子類中的公共方法來設置父類屬性的值,例如setName和setAge方法,然后通過子類中的公共方法來獲取這些值,例如getName和getAge方法。在showInfo方法中,我們可以通過父類中的getName和getAge方法來獲取$name和$age屬性的值,并通過$this->score來獲取$score屬性的值,最后輸出學生的信息。
在PHP中,protected屬性和方法提供了一種訪問限制的機制,可以保護類的內部實現細節,同時允許子類擴展和修改這些屬性和方法。通過覆蓋protected屬性和方法,我們可以在子類中重新定義這些屬性和方法的實現方式,并利用繼承實現代碼的復用和擴展。