一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php5中類的學(xué)習(xí)

復(fù)制代碼 代碼如下:
<?php     
class TEST     
{     
    const NAME = 'value'; // 常量     
    public $name = 'value'; // 屬性     
    public function name() // 方法     
    {     
        echo 'value';     
    }     
}     
?>    


在這之中,屬性和方法又可以使用public, protected, private三個不同的關(guān)鍵字來將屬性和方法的作用范圍做進一步的區(qū)分,帶有private關(guān)鍵字的屬性和方法,只有所在的類中的方法才能調(diào)用;帶有protected關(guān)鍵字的屬性和方法,除了自己以外,自己的父類和子類中的方法也可以調(diào)用;帶有public關(guān)鍵字的屬性和方法,則可以從實例化以后的對象中進行調(diào)用,這樣做最大的好處給所有的屬性和方法增加了一些描述的特征,更便于整理和組織代碼的結(jié)構(gòu)。const關(guān)鍵字先跳過,和后面的static一起講。

static關(guān)鍵字是有別于public, protected, private的另一類型關(guān)鍵字(因此可以和public, protected, private疊加起來使用):

復(fù)制代碼 代碼如下:
<?php     
class TEST     
{     
    public static function name()      
    {     
        echo 'value';     
    }     
}     
?>

帶有static關(guān)鍵字的方法,可以在不對類進行實例化的情況下直接通過“::”符號調(diào)用,和public, protected, private的搭配,也可以讓調(diào)用區(qū)分權(quán)限,但是一般都是和public搭檔,前面提到的常量關(guān)鍵字const,應(yīng)該就是public static類型的,因此只能通過self::NAME,TEST::NAME這樣的形式調(diào)用常量,后面的__construct,__destruct等方法,都是屬于static。

類的結(jié)構(gòu)部分,最后介紹的兩個關(guān)鍵字是abstract和final,abstract關(guān)鍵字表示這個類必須被他的子類覆寫,而final關(guān)鍵字表示這個類必須不能被他的子類覆寫,這兩個關(guān)鍵字的功能是正好相反的,帶有abstract的方法被成為抽象方法,帶有抽象方法的類,成為抽象類,這個在后面還有介紹。

類的使用:

類的使用主要有兩種方法,一種是使用new關(guān)鍵字,另一種是使用“::”符號:

php代碼 
復(fù)制代碼 代碼如下:
<?php     
class TEST     
{     
    public static function name()      
    {     
        echo 'value';     
    }     
}     
//方法1:使用new關(guān)鍵字     
$test = new TEST;     
$test->name();     

//方法2:使用“::”符號     
TEST::name();     
?> 
  

(1):使用new關(guān)鍵字成為實例化,上面的$test就是一個通過TEST類實例化而產(chǎn)生的對象,$test->name()稱為調(diào)用$test對象的name方法。
(2):使用new關(guān)鍵字使用類的時候,可以使用$this來指代類本身。
(3):使用“::”符號的前提是方法必須是帶有static關(guān)鍵字的,使用new關(guān)鍵字時,被調(diào)用的方法,必須帶有public關(guān)鍵字(一個方法如果不帶public, protected, private中的任何一個關(guān)鍵字,則默認為public)
(4):同一個類可以通過new關(guān)鍵字被實例成多個不同的對象,但是彼此之間的是隔離的;“::”符號在使用的時候,方法在多次使用之間,是共享的:

php代碼
復(fù)制代碼 代碼如下:
<?php     
class TEST1     
{     
    public $name = 0;     
    public function name()      
    {     
        $this->name = $this->name + 1;     
    }     
}     

$test1 = new TEST1;     
$test2 = new TEST1;     
$test1->name(); //$name1 == 1     
$test2->name(); //$name1 == 1     

/*--------------------------------------------*/    

class TEST2     
{     
    public static $name = 0;     
    public static function name()      
    {     
        TEST2::$name = TEST2::$name + 1;     

    }     
}     
TEST2::name(); // $name == 1     
TEST2::name(); // $name == 2     
?>    
類的關(guān)系:

類與類之間的關(guān)系,主要有抽象,接口和繼承:

php代碼 
復(fù)制代碼 代碼如下:
<?php     
abstract class TEST1 // 抽象     
{     
    abstract public function name1();     
    public function name2()     
    {     

    }     
}     

class TEST2 extends TEST1 implements TEST3 // 繼承     
{     
    public function name1()     
    {     

    }     
}     

interface TEST3 // 接口     
{     
    public function name2();     
}     
?>   


(1)帶有abstract關(guān)鍵字的類是抽象類,帶有abstract關(guān)鍵字的方法是抽象方法,抽象類中的抽象方法,必須在子類中被覆寫。
(2)帶有interface關(guān)鍵字的類,就是接口,接口不允許實現(xiàn)任何的方法,接口中所有的方法,都必須在子類中被覆寫。
(3)帶有 classA extends classB 或者 classA implements classB 字樣的就是繼承,extends表示繼承另一個類,implements表示繼承另一個接口,一次只能extends一個類,但是可以implements多個接口。
(4)抽象類,接口,以及最終繼承并實現(xiàn)的方法,都必須是public的。

在繼承的過程中,子類會覆寫父類的同名方法,這個時候如果需要在子類中調(diào)用父類的方法,可以使用parent關(guān)鍵字或者類名加上“::”符號調(diào)用:

php代碼 
復(fù)制代碼 代碼如下:
<?php     
class TEST1 extends TEST2     
{     
    public function name()     
    {     
        echo parent::name2();     
        echo TEST2::name2();     
    }     
}     
class TEST2     
{     
    public function name2()     
    {     
        echo 'value2';     
    }     
}     
$test = new TEST1;     
$test->name();     
?>  
 

這里再解釋一下“::”方法在類中的作用,一個作用是在沒有實例化的情況下調(diào)用常量(其實也理解成static就可以了),static屬性和方法,再一個是在類的內(nèi)部,通過self,parent和類名建立便捷的調(diào)用通道。

對象于對象之間的關(guān)系,主要是“==”等于,“===”全等于,不等于和clone:

php代碼
<?php    
class TEST    
{    
    public function name()    
    {    

    }    
}    

$test1 = new TEST;    
$test2 = new TEST;    
$test3 = $test1;    
echo $test1 == $test2 ? true : false; // true    
echo $test1 == $test3 ? true : false; // true    
echo $test2 == $test3 ? true : false; // true    
echo $test1 === $test2 ? true : false; // false    
echo $test1 === $test3 ? true : false; // true    
echo $test2 === $test3 ? true : false; // false    
?>   

(1)兩個類只要擁有相同的屬性和方法,就是“==”等于。
(2)兩個類必須是指向的同一個對象,才能是“===”全等于。

clone比較特殊,在上面的例子中,$test3 = $test1的過程并不是給了 $test3 一份 $test1 對象的拷貝,而是讓 $test3 指向了 $test1,如果一定要獲得一份$test1的拷貝,就必須使用clone關(guān)鍵字:

php代碼
復(fù)制代碼 代碼如下:
<?php     
$test3 = clone $test1;     
?>    


類的鉤子:

__autoload:
是一個函數(shù)名,也是唯一一個在類的外部使用的鉤子,在實例化一個對象的時候,如果沒有預(yù)先載入類,就會調(diào)用這個鉤子。

__construct
在類被實例話的時候,被調(diào)用的鉤子,可以做一些初始化的操作。

__destruct
在類被銷毀的時候,被調(diào)用的鉤子。

__call
當(dāng)對象試圖調(diào)用一個不存在的方法的時候,被調(diào)用的鉤子

__sleep
當(dāng)使用serialize()函數(shù)對一個類進行序列話操作的時候,會調(diào)用這個鉤子

__wakeup
當(dāng)使用unserialize()函數(shù)對一個類進行反序列話操作的時候,會調(diào)用這個鉤子

__toString
當(dāng)一個對象將被轉(zhuǎn)變?yōu)樽址臅r候,會調(diào)用這個鉤子(比如echo的時候)

__set_state
當(dāng)調(diào)用var_export()函數(shù)操作一個類的時候,會調(diào)用這個鉤子

__clone
當(dāng)使用clone關(guān)鍵字對一個類進行拷貝操作的時候,會調(diào)用這個鉤子

__get
在獲取一個類中的屬性值的時候,會調(diào)用這個鉤子

__set
在設(shè)置一個類中的屬性值的時候,會調(diào)用這個鉤子

__isset
在使用isset()函數(shù)對類中的屬性值進行判定的時候,會調(diào)用這個鉤子

__unset
在使用unset()函數(shù)銷毀一個屬性值的時候,會調(diào)用這個鉤子

類的小技巧:

在實例話一個類的時候,可以使用這樣的形式給__construct鉤子傳遞參數(shù):

php代碼 
復(fù)制代碼 代碼如下:
<?php     
class TEST     
{     
    public function __construct($para)     
    {     
        echo $para;     
    }     
}     

$test = new TEST('value'); // 顯示 value     
?>   


foreach()函數(shù)可以用來對類或者對象中的屬性進行遍歷,遍歷的時候會先判斷public, protected, private的情況而顯示:

php代碼
復(fù)制代碼 代碼如下:
<?php     
class TEST     
{     
    public $property1 = 'value1';     
    public $property2 = 'value2';     
    public $property3 = 'value3';     

    public function name()     
    {     
        foreach($this as $key => $value)     
        {     
            print "$key => $value/n";     
        }     
    }     
}     

$test = new TEST;     
foreach($test as $key => $value)     
{     
    print "$key => $value/n";     
}     
$test->name();     
?>    

在給類中的方法傳遞參數(shù)的時候,可以對參數(shù)進行強制的判定,這里只支持對數(shù)組和對象的判定:

php代碼
復(fù)制代碼 代碼如下:
<?php     
class TEST1     
{     
    public function name( TEST2 $para )     
    {     

    }     
}     

class TEST2     
{     

}     

$test2 = new TEST2;     
$test1 = new TEST1;     

$test1->name('value'); // 會報錯,因為這個參數(shù)必須是TEST2實例化以后的對象     
$test1->name($test1); // 不會報錯     
?>    


兼容php4的語法:

php5的類是往下兼容php4的,這些php4時代的語法也得到了繼承,但是并不建議在php5的環(huán)境中使用。

(1)使用var預(yù)設(shè)屬性,會自動轉(zhuǎn)換成public。

(2)使用類名作為構(gòu)造函數(shù),在沒有__construct構(gòu)造方法的情況下,會尋找和類名相同的函數(shù)作為構(gòu)造函數(shù)。

php技術(shù)php5中類的學(xué)習(xí),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本三级韩国三级美三级91 | 午夜激情视频在线播放 | 午夜国产高清精品一区免费 | 91视频美女 | 91国在线高清视频 | 日本伊人精品一区二区三区 | 久久精品国产99久久99久久久 | 久视频在线观看 | 一级做a爰片性色毛片2021 | 在线精品国产第一页 | 玖玖爱国产 | 久99久热只有精品国产男同 | 国内精品免费一区二区观看 | 亚洲精品社区 | 久久综合九色综合97婷婷群聊 | 天天做天天做天天综合网 | 成人免费大片黄在线观看com | 精品中文字幕久久久久久 | 美女国内精品自产拍在线播放 | 中文字幕亚洲日韩无线码 | 国产成人午夜片在线观看 | 欧美一区二区三区激情啪啪 | 国产精品中文字幕在线观看 | 国产精品自在线天天看片 | 夜夜夜夜夜夜夜猛噜噜噜噜噜噜 | 最新国产精品视频免费看 | 国语精品视频在线观看不卡 | 综合天堂 | 中文字幕在线观看2023 | 国产精品一区二区免费 | 日本久久综合网 | 激情综合婷婷丁香六月花 | 激情九九| 1024cc香蕉视频 | 午夜视频免费在线 | 一级特黄色毛片免费看 | 女人张腿让男桶免费视频网站 | 美女视频黄是免费 | 亚洲色在线视频 | 国产第一第二第三第四第五 | 在线观看视频www |