欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

復(fù)習(xí)PHP-語言參考-類與對象

1.簡介

我們一直強(qiáng)調(diào)網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站制作公司不一定是大公司,成都創(chuàng)新互聯(lián)公司作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。

沒啥說的。

2.基本概念

類有自己的屬性和方法,內(nèi)部使用可用偽變量$this(是該類的一個(gè)引用)訪問屬性或方法

類通過new被實(shí)例化(如果該類屬于某個(gè)命名空間,則需要寫全)

可以通過clone 復(fù)制一個(gè)新實(shí)例

類可以被繼承extends,接口類interface可以被implements繼承

5.5起,可以直接輸出類的完全限定名稱Classname::class 將輸出 namespace\classname

5.3引入的新實(shí)例化類的方法

class T

{

     static public function getT()

    {

          return new static;

    }

}

只知道可以這樣實(shí)例化,但不知道有什么區(qū)別。

例:PHP的單例模式

 

<?php
/**
* 演示一個(gè)單例模式
* 既然是單例,則他不應(yīng)該被繼承,不能被多次實(shí)例化
* @author Lou
* */
final class T //不能被繼承
{
    private static $ins = null; //我就是唯一的實(shí)例
    public $num = 0; //num做校對用
    private function __construct() //保證不能被外部訪問到
    {
        $this->num = mt_rand(10000, 99999); //隨機(jī)一個(gè)num
    }
    private function __clone()
    {
        return false; //不允許被克隆
    }
    public static function creatIns()
    {
        if(self::$ins == null) //如果是null
        {
            self::$ins = new self(); //就實(shí)例化
        }
        return self::$ins; //否則直接返回
    }
}

?>

3.類屬性

以public protected private開頭

5.3以后,可以使用nowdocs格式聲明類屬性

可用static修飾類屬性

4.類常量

用const修飾 且接一個(gè)無$符號的格式常量名

5.自動(dòng)加載類

x.spl_auto_register的用法(注冊自定義加載文件的函數(shù)來實(shí)現(xiàn)自動(dòng)加載類文件)

<?php
function loader($classname)
{
    $filename = "class/".$classname.".class.php";
    if(is_file($filename))
    {
        require_once $filename;
    }else{
        exit("can not find file");
    }
}
spl_autoload_register("loader");
$obj = new A;
echo $obj->a;
?>

提示:可以注冊多個(gè)自定義加載文件的函數(shù),用于包含不同的類文件目錄

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

__construct 類實(shí)例創(chuàng)建時(shí)調(diào)用

__destruct 類實(shí)例銷毀時(shí)調(diào)用

7.訪問控制

public 外部內(nèi)部繼承都可直接訪問

protected 僅內(nèi)部和繼承可以直接訪問

private 僅內(nèi)部可以直接訪問

8.繼承

extends  可以繼承父類的 公有, 受保護(hù),屬性和方法

9.范圍解析操作符::

可用來訪問靜態(tài)類成員,或者類常量

擴(kuò)展:self,parent 和 static 這三個(gè)特殊的關(guān)鍵字是用于在類定義的內(nèi)部對其屬性或方法進(jìn)行訪問的,還有一個(gè)偽變量$this

10.static(靜態(tài))關(guān)鍵字

需要注意的是 可以有這種表達(dá)式 static::who();//who是類成員

這個(gè)表達(dá)式的用處在于可以后期靜態(tài)綁定(就是通過實(shí)例化的OBJ來判定這個(gè)who是子類的who還是父類的who,如果是子類實(shí)例化,則這個(gè)who就調(diào)用子類的who)

注意:static::只能用于靜態(tài)屬性或方法

11.抽象類

abstract 抽象類不能被實(shí)例化,只能被繼承。

抽象類的抽象方法必須被子類重寫,且重寫的控制權(quán)限必須大于等于父類的,如父類是protected,子類則必須至少為protected,也可以是public,但不能是private。

提示:子類方法可以有可選參數(shù)(抽象父類沒有的話)。

12.對象接口

interface  所有的類方法都必須是公有的空方法。子類接口父類用implements,子類必須實(shí)現(xiàn)父類所有的方法,子類可以實(shí)現(xiàn)多個(gè)接口,用,分隔。

接口可以繼承別的類

接口里可以有常量成員,但需要注意的是,子類不能復(fù)寫它。(遵循常量不能修改的特性)

13.traits

這個(gè)可以非常方便地使用其他類的東西,而不需要繼承或者實(shí)例化。它的優(yōu)先級為:從基類繼承的成員被 trait 插入的成員所覆蓋。優(yōu)先順序是來自當(dāng)前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。

如何使用? 直接用use。 可以use多個(gè)traits,用,分隔即可。

如果一個(gè)use的兩個(gè)traits 有相同的方法怎么辦?(即方法同名),這時(shí)需要用insteadof 和as 來區(qū)別,但應(yīng)當(dāng)避免這樣。

use A,B {
        B::go insteadof A;//這時(shí)B的go方法將會(huì)覆蓋A的go方法
        A::bed as protected abed; //a的bed方法將會(huì)以abed來訪問(這樣做即可以保留同名的方法又能解決沖突,是個(gè)好辦法)    }

注意:as語法還可以修改控制級別

如:A::bed as protected abed; 或者僅僅修改它的級別

A::bed as protected; 需要注意的是,他可以破壞trait里的私有為公共,這在某些方面來說好像不腫么好。

trait不能用final修飾,并且不能被繼承,好像只能被use。

類能使用trait,trait也能使用trait

trait也可以使用抽象abstract方法,在use的類中必須重寫該方法

(需要注意的是:如果trait中的抽象類為私有,則use的類不能重寫它,即使將其as成受保護(hù)或公有也不行)

trait里同樣可以定義屬性以及static靜態(tài)成員

注意trait類屬性不能被as和重寫,所以trait的屬性和類的屬性必須不重名。

14.重載

重載的參數(shù)不能引用傳遞

所有重載方法都必須為public

重載屬性就是當(dāng)訪問一個(gè)對象中不存在的屬性時(shí),會(huì)自動(dòng)按__set里的規(guī)則添加該屬性(相關(guān)函數(shù)為__set,__get,__isset,__unset)

重載方法就是當(dāng)訪問一個(gè)對象中不存在的方法時(shí),會(huì)自動(dòng)調(diào)用__call里的東西,如果訪問的是一個(gè)靜態(tài)不存在的方法時(shí),會(huì)自動(dòng)調(diào)用__callstatic里的東西,這兩個(gè)魔術(shù)方法必須公共,_callstatic必須也為static方法。

15.遍歷對象

普通遍歷 foreach 即可。

可以通過Iterator接口實(shí)現(xiàn)自動(dòng)義遍歷對象,不過有啥用?。?除了調(diào)試沒啥用感覺。更多遍歷參見SPL擴(kuò)展。

http://www.php.net/manual/zh/language.oop5.iterations.php

16.魔術(shù)方法

__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()和 __clone() 等方法在 PHP 中被稱為"魔術(shù)方法"(Magic methods)。

__sleep和__wakeup的用法是:

當(dāng)想序列化一個(gè)對象并保存時(shí)(serialize和unserialize),這兩個(gè)方法就會(huì)被調(diào)用。

__sleep可以返回一個(gè)數(shù)組(包含只需要序列化的屬性),用于清理不想被序列化的屬性。

unserialize一個(gè)對象時(shí),__wakeup會(huì)首先被調(diào)用,如重新建數(shù)據(jù)庫連接等。(即一個(gè)數(shù)據(jù)庫對象被unserialize時(shí),可以在__wakeup里添加重新調(diào)用連接數(shù)據(jù)庫的方法,就可以重新連接了。)

注意:序列化只能序列化類屬性,并不能序列化類方法。

感覺序列化對象有點(diǎn)像游戲里的暫停功能。。。

__toString:當(dāng)你想echo obj時(shí)  顯示這個(gè)(這個(gè)方法必須返回一個(gè)string用于顯示),實(shí)際用處也不大吧。

__invoke當(dāng)嘗試將實(shí)例化的對象用函數(shù)方式調(diào)用時(shí),用這個(gè)

像這樣 $obj(5),變態(tài)才會(huì)這樣調(diào)用。

__set_state 注意這個(gè)類魔術(shù)方法必須是static的,當(dāng)var_export導(dǎo)出類時(shí),這個(gè)方法會(huì)被調(diào)用

http://www.php.net/manual/zh/language.oop5.magic.php

具體看這里吧,不知道有啥用。

17.final關(guān)鍵字

類的屬性不能為final,但類 和類方法可以被定義為final,即不能繼承和重寫。

18.對象復(fù)制

就是 clone,平時(shí)用不多,手冊上就GTK時(shí)會(huì)用到,但現(xiàn)目前PHP做界面啊。。。 我也想啊

當(dāng)被clone時(shí),對象里的__clone會(huì)被調(diào)用。

比如你可以在__clone里把類屬性做一個(gè)遞增,你就會(huì)知道這個(gè)對象被克隆了多少次。

18.對象比較

== 同一個(gè)類的實(shí)例并且屬性和屬性值相等

=== 必須是同一個(gè)類的同一個(gè)實(shí)例(即同一個(gè)對象)。

提示:PHP的擴(kuò)展中可以自定義對象比較的原則。

19.類型約束

參見 C++的類方法參數(shù)類型  如  CLASSA $a 這樣子  必須加上參數(shù)類型。

http://www.php.net/manual/zh/language.oop5.typehinting.php 其他看這里

20.后期靜態(tài)綁定

看例子就明白了。

<?php
class A
{
    public static function who()
    {
        echo __CLASS__;
    }
    public static function getWho()
    {
        //echo self::who();
        echo static::who();
    }
}
class B extends A
{
    public static function who()
    {
        echo __CLASS__;
    }
}
$obja = new A;
$obja->getWho();
$objb = new B;
$objb->getWho();
//用self::who()將永遠(yuǎn)顯示A,而用static::who將顯示AB
?>

http://www.php.net/manual/zh/language.oop5.late-static-bindings.php 例4需要注意。(static::在self   parent 下的情況)

21.對象和引用

在之前已經(jīng)研究過了

$a = new A;

$b = $a; //$a,$b都是 new A的引用

$c = &$a; //$c是$a的引用,$a是new A的引用

22.對象序列化

serialize和unserialize,前面理解過了。需要注意的是,unserialize時(shí),需要包含對象所對應(yīng)的類文件。(即類)

需要理解的是:當(dāng)序列化和反序列化與spl_autoload_register組合應(yīng)用時(shí),反序列化時(shí)會(huì)自動(dòng)調(diào)用注冊進(jìn)去的函數(shù)(即include class文件。)

這一章的內(nèi)容挺多的,具體回憶可以參考

http://www.php.net/manual/zh/language.oop5.php

網(wǎng)站標(biāo)題:復(fù)習(xí)PHP-語言參考-類與對象
分享URL:http://aaarwkj.com/article12/jpddgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、定制開發(fā)、軟件開發(fā)動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
色久悠悠婷婷综合在线亚洲| 日本av天堂中文字幕| 日韩精品中文字幕免费人妻| 午夜精品一区二区三区在线视频| 国产成人精品久久性色av| 内射极品美女在线观看| 亚洲一区欧美日韩91| 少妇精品久久久一区二区三区| 国产精品国产三级专区| 成人精品淫片一级免费| 日韩不卡免费在线视频| 91精品一久久香蕉国产| 国产91在线一区精品| 三级视频一区二区三区| 亚洲成人精品免费观看| 日韩av亚洲在线观看| 中文字幕熟女人妻另类癖好| 免费国产污网站在线观看| 亚洲欧美午夜福利视频| 久久三级中文欧大战字幕| 欧美黄片视频免费观看| 声入人心第一季在线观看| 国产一区日本二区欧美三区| 欧美福利免费在线视频| 国产精品一区二区久久毛片| 精品人妻一区二区三区蜜桃视频| 国产亚洲精品久在线| 免费不卡无码毛片观看| 亚洲国产欧美一区三区成人| 天堂在线手机av观看| 国产乱av一区二区三区| 久久久久久97精品| 欧美三级特黄在线播放| 丰满人妻二区三区性色| 欧美又粗又成人大视频| 日韩欧美国产精品自拍| 亚洲综合中文字幕经典av在线| 观看亚洲一区二区三区大片| 日本一区二区在线高清| 中文字幕人妻熟人妻熟丝| 在线观看国产一区二区不卡|