PHP 方法重載的注意事項

先給出個簡答的例子:

<?php

class ParentClass
{
    public function one()
    {
        echo 'parent here<br />';
    }

    public function alone()
    {
        echo 'alone<br />';
        $this->one();
    }
}

class ChildClass extends ParentClass
{
    public function one()
    {
        echo 'child here<br />';
    }

    public function test()
    {
        $this->alone();
    }
}

$child = new ChildClass();
$child->test();

//輸出
alone
child here

注意在子類中實例中調用父類的方法,如果父類方法中包含子類重載后的方法時,會優先調用子類方法。如果子類中沒有此方法時,才會調用父類的方法。

<?php

class ParentClass
{
    public function one()
    {
        echo 'parent here<br />';
    }

    public function alone()
    {
        echo 'alone<br />';
        $this->one();
    }
}

class ChildClass extends ParentClass
{
    // public function one()
    // {
    //     echo 'child here<br />';
    // }

    public function test()
    {
        $this->alone();
    }
}

$child = new ChildClass();
$child->test();

//輸出
alone
parent here

這樣的行為,在python中也同樣成立:

class ParentClass:
    def one(self):
        print "parent here"
        
    def alone(self):
        print "alone"
        self.one()
        

class ChildClass(ParentClass):
    def one(self):
        print "child here"
        
    def test(self):
        self.alone()
        
c = ChildClass()
c.test()

//輸出
alone
child here

還有一個特性值得注意的是:在C和C++里,父類都不允許調用子類的方法,但在php里可以。
下面是一個調用的例子:

<?php
class Animal
{
    protected $name;
    public function run()
    {
        echo 'Aniaml run';
        $this->swim();
        echo $this->fishNum;

    }
}

class Fish extends Animal
{
   public $fishNum=10;
    public function swim()
    {
        echo 'Fish swim';
    }
}
$fish=new Fish();
$fish->swim();
$fish->run();

//輸出
Fish swimAniaml runFish swim10


參考網站:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容