• <abbr id="qqgmy"></abbr>
      <menu id="qqgmy"><abbr id="qqgmy"></abbr></menu>
    • <rt id="qqgmy"><code id="qqgmy"></code></rt>
      • PHP類和對象(2)

        • 2020-07-30 14:27:06
        • 閱讀次數(shù):
        • 作者:盈嵐科技小編
        • 來源:http://www.margaycoffee.com

        構(gòu)造函數(shù)和析構(gòu)函數(shù)

        PHP 5允許開發(fā)者在一個類中定義一個方法作為構(gòu)造函數(shù),具有構(gòu)造函數(shù)的類會在每次創(chuàng)建對象時先調(diào)用該方法,一般在構(gòu)造函數(shù)中做一些初始化工作。其語法格式如下:

        void --construct ([ mixed $args [, $... ]] )

        如果子類中定義了構(gòu)造函數(shù),則不會自動調(diào)用父類構(gòu)造函數(shù)。要執(zhí)行父類構(gòu)造函數(shù),需要在子類的構(gòu)造函數(shù)中調(diào)用parent::__construct()。

        <?phpclass BaseClass {   function __construct() {       print "對象初始化構(gòu)造函數(shù)";   }}class SubClass extends BaseClass {   function __construct() {       parent:__construct();       print "初始化子類";   }}$obj = new BaseClass();      //自動顯示:對象初始化構(gòu)造函數(shù)$obj = new SubClass();       //自動執(zhí)行父類和子類的構(gòu)造函數(shù)?>

        為了實現(xiàn)向后兼容性,如果PHP 5在類中找不到__construct()函數(shù),它就會嘗試尋找舊式的構(gòu)造函數(shù),也就是和類同名的函數(shù)。

        析構(gòu)函數(shù)就是在對象的所有引用都被刪除或者當(dāng)對象被顯式銷毀時執(zhí)行。其語法格式如下:

        void --destruct ( void )

        例如,在下面示例中將會自動執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)。

        <?phpclass MyClass {   function __construct() {       print "構(gòu)造函數(shù)";   }   function __destruct() {       print "析構(gòu)函數(shù)";   }}$obj = new MyClass();?>

        與構(gòu)造函數(shù)一樣,父類的析構(gòu)函數(shù)不會被引擎自動調(diào)用。要執(zhí)行父類的析構(gòu)函數(shù),必須在子類的析構(gòu)函數(shù)體中顯式調(diào)用parent::__destruct()。

        對象繼承

        繼承是面向?qū)ο缶幊痰幕咎匦?,PHP的對象模型也支持繼承。繼承將會影響到類與類、對象與對象之間的關(guān)系。當(dāng)擴(kuò)展一個類,子類就會繼承父類的所有公有和保護(hù)方法。

        但是子類的方法會覆蓋父類的方法。

        例如,在下面示例中,子類bar繼承父類foo的printPHP()方法,同時重寫了父類的printItem()方法。

        <?phpclass foo{    public function printItem($string) {        echo 'Foo: ' . $string; }     public function printPHP(){        echo 'PHP is great.';    }}class bar extends foo{    public function printItem($string) {        echo 'Bar: ' . $string;    }}$foo = new foo();$bar = new bar();$foo->printItem('baz');    //顯示:Foo: baz$foo->printPHP();          //顯示:PHP is great$bar->printItem('baz');    //顯示:Bar: baz$bar->printPHP();         //顯示:PHP is great?>

        繼承對于功能的設(shè)計和抽象是非常有用的,而且對于類似的對象增加新功能就無須重新再寫這些公用的功能。

        抽象類

        抽象類不能直接被實例化,必須先繼承該抽象類,然后再實例化子類。抽象類中至少包含一個抽象方法。如果類方法被聲明為抽象的,那么其中就不能包括具體的功能實現(xiàn)。繼承一個抽象類時,子類必須實現(xiàn)抽象類中的所有抽象方法。如果抽象類中某個抽象方法被聲明為protected,那么子類中實現(xiàn)的方法就應(yīng)該聲明為protected或者public,而不能定義為private。如:

        <?phpabstract class AbstractClass{    abstract protected function getValue();  //強(qiáng)制子類必須定義的方法    public function printOut() {             //普通方法(非抽象方法)print $this->getValue() . "\n";    }}class Class1 extends AbstractClass{    protected function getValue() {         //具體化抽象方法        return "子類1";    }}$class1 = new Class1;$class1->printOut();                       //顯示:子類1?>

        注意:抽象類的子類中的普通方法執(zhí)行方式和其他類相同。

        當(dāng)前文章標(biāo)題:PHP類和對象(2)

        當(dāng)前URL:http://www.margaycoffee.com/news/wzzz/3250.html

        上一篇:PHP類和對象(1)

        下一篇:PHP編碼規(guī)范

        網(wǎng)站建設(shè)、抖音推廣、頭條推廣、微信朋友圈推廣、快手推廣專線:181-8386-5875(微信同號)
        在线一区视频二区三区,av无码久久久不卡网站,亚洲国产人成精品,国产成人白丝视频
        • <abbr id="qqgmy"></abbr>
          <menu id="qqgmy"><abbr id="qqgmy"></abbr></menu>
        • <rt id="qqgmy"><code id="qqgmy"></code></rt>