抽象類和方法

類能夠用 abstract 修飾,表示抽象類,抽象類不能直接被實例化。可是,繼承了抽象類的普通類是能夠被實例化的。如:php

//one.php

<?php

abstract class one
{
    
    function __construct(){

    }

}
//new one;
?>

實例化的時候會報Fatal error的錯誤。
可是繼承自這個抽象類的方法就能夠被實例化。如:框架

//index.php

include 'one.php';

class index extends one
{
    
    function __construct(){
        parent::__construct();
    }
}
$obj = new index;

除了類能夠用 abstract 修飾以外,方法也能被 abstruct 修飾,爲抽象方法。抽象方法真的是很抽象,它並無內容,如:函數

<?php
//one.php
abstract class one
{
    
    function __construct(){

    }

    abstract public function test();
    //容許帶參數,可是在子類中重寫的時候也必須帶上參數,參數名能夠不一樣
    //abstract public function test($param);

}
//new one;
?>

若是方法被 abstruct 修飾,那麼這個類必須用abstruct,否則就
會報錯。也就是說抽象類能夠有普通的方法,可是抽象方法必須在抽象類裏面定義,而且,若是繼承了這個有抽象方法的抽象類,那麼在你繼承的這個類裏面必須重寫這個方法,不然依然會報錯。如:性能

<?php
//index.php
include 'one.php';

class index extends one
{
    
    function __construct(){
        parent::__construct();
    }
    //這個方法不重寫就會報錯
    public function test(){
        echo 'hello';
    }
    //若是抽象的父類中該函數有參數,那麼重寫的時候也要帶上參數
    public function test($papapa){
        echo 'hello';
    }
}
$obj = new index;

?>

可是抽象類中的抽象方法彷佛不能被定義爲靜態的,定義了以後就報錯。如:code

<?php
//one.php
abstract class one
{
    
    function __construct(){

    }

    abstract public function test($param);
    //定義靜態抽象方法就報錯
    static abstract  function hello();

}
//new one;
?>
<?php
//index.php
include 'one.php';

class index extends one
{
    
    function __construct(){
        parent::__construct();
    }

    public function test($aa){
        echo 'hello';
    }
    //並不能實現
    static public function hello(){
        echo 'word';
    }
}
$obj = new index;

?>

還有,抽象類是能夠繼承抽象類的,而且不須要重寫父類的抽象方法,它的抽象方法不能和父類的抽象方法同名,他們的關係就像是拓展延伸的關係。如:繼承

<?php
//index.php
include 'one.php';



abstract class two extends one
{
    abstract public function test1();

    //重寫了以後子類無需再重寫
    /*public function test(){

    }*/
}

class index extends two
{
    public function test(){

    }

    public function test1(){

    }
}

$obj = new index;


?>

因爲平時接觸這些也很少,主要都是基於框架開發或者直接在其餘系統上二次開發,對這些稍微底層一點的知識理解的不透徹,在個人理解看來,抽象類和方法主要是用在比較底層的被繼承的類中,供其餘繼承的類去拓展。可是是否對於性能是否有改變就不大清楚了。開發

相關文章
相關標籤/搜索