您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法的作用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
PHP面向?qū)ο笾谐S玫年P(guān)鍵字
final
1.final不能修飾成員屬性(類中常量不是用這個(gè)關(guān)鍵字)
2.final只能修飾類和方法
作用:
使用final修飾的類不能被子類繼承
使用final修飾的方法不能被子類覆蓋
用來限制類不被繼承,方法不被覆蓋就使用final
<?php //final修飾的類不能被繼承 final class Person{ var $name; var $age; var $sex; function __construct($name,$age,$sex){ $this->name=$name; $this->age=$age; $this->sex=$sex; } function fun1(){ echo $this->name; } } //Student類繼承類用final修飾的Person類,所以會(huì)報(bào)錯(cuò) class Student extends Person{ } $stu=new Student("zs",20,"nan"); $stu->fun1(); ?>
static(靜態(tài)關(guān)鍵字)
1.使用static可以修飾成員屬性和成員方法,不能修飾類
2.用static修飾的成員屬性,可以被同一個(gè)類的所有對(duì)象共享
3.靜態(tài)的數(shù)據(jù)是存在內(nèi)存中的數(shù)據(jù)段中(初始化靜態(tài)段)
4.靜態(tài)的數(shù)據(jù)是在類被第一次加載時(shí)分配到內(nèi)存中的,以后再用到類時(shí)就直接從數(shù)據(jù)段中獲取
5.什么是類被加載?只要在程序中使用到這個(gè)類(有這個(gè)類名出現(xiàn))
6.靜態(tài)方法(static修飾的方法),不能訪問非靜態(tài)的成員(在非靜態(tài)方法中可以訪問靜態(tài)成員)
因?yàn)榉庆o態(tài)的成員,就必須用對(duì)象來訪問,訪問內(nèi)部成員使用的就是$this,而靜態(tài)方法不用使用對(duì)象調(diào)用,也就沒有對(duì)象,$this也就不能代表對(duì)象,非靜態(tài)的成員還必須使用對(duì)象
如果你確定一個(gè)方法中不使用非靜態(tài)成員,則可以將這個(gè)方法聲明為即靜態(tài)方法
注意:靜態(tài)的成員都要使用類名去訪問,不要?jiǎng)?chuàng)建對(duì)象,不用對(duì)象訪問
類名::靜態(tài)成員
如果在類中使用靜態(tài)成員,可以使用self代表本類
const
1.它只能修飾成員屬性
2.類中聲明常量屬性使用const
3.訪問方式和static靜態(tài)成員屬性一樣(在類外部使用 類名::常量 在類內(nèi)部使用 self::常量)
4.常量一定要在聲明的時(shí)候就給初值
<?php //定義一個(gè)類“人們” class Person{ protected $name; protected $age; protected $sex; static $country="中國(guó)"; //聲明一個(gè)常量 const RUN="走"; //構(gòu)造方法 function __construct($name,$age,$sex){ $this->name=$name; $this->age=$age; $this->sex=$sex; } function getCountry(){ //如果在類中使用靜態(tài)成員,可以使用self代表本類 return self::$country; } function say(){ echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}。<br>"; } protected function eat(){ echo "吃飯!<br>"; } function run(){ //在類的內(nèi)部使用常量 self::常量 echo self::RUN."<br>"; } //聲明靜態(tài)的方法 static function hello(){ echo "你好<br>"; } }
PHP面向?qū)ο笾谐S玫哪g(shù)方法
__call()
作用:調(diào)用對(duì)象中不存在的方法時(shí),就會(huì)出現(xiàn)系統(tǒng)報(bào)錯(cuò),然后程序退出。
什么時(shí)候自動(dòng)調(diào)用:就會(huì)在調(diào)用一個(gè)對(duì)象中不存在的方法時(shí)就會(huì)自動(dòng)調(diào)用
處理一些不存在的錯(cuò)誤調(diào)用
這個(gè)方法需要兩個(gè)參數(shù)
<?php //定義一個(gè)類“人們” class Person{ protected $name; protected $age; protected $sex; static $country="中國(guó)"; //聲明一個(gè)常量 const RUN="走"; //構(gòu)造方法 function __construct($name,$age,$sex){ $this->name=$name; $this->age=$age; $this->sex=$sex; } function getCountry(){ //如果在類中使用靜態(tài)成員,可以使用self代表本類 return self::$country; } function say(){ echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}。<br>"; } protected function eat(){ echo "吃飯!<br>"; } function run(){ //在類的內(nèi)部使用常量 self::常量 echo self::RUN."<br>"; } //處理一些不存在的錯(cuò)誤調(diào)用 //就會(huì)在調(diào)用一個(gè)對(duì)象中不存在的方法時(shí)就會(huì)自動(dòng)調(diào)用 function __call($methodName,$args){ //$methodName調(diào)用不存在方法的方法名 $args里面的參數(shù) echo "你調(diào)用的方法{$methodName}(參數(shù):"; print_r($args); echo ")不存在<br>"; } //聲明靜態(tài)的方法 static function hello(){ echo "你好<br>"; } } $p=new Person("張三",20,"女"); $p->test(10,20,30); $p->demo("aa","bb"); $p->say(); ?>
__toString()
直接輸出對(duì)象引用的時(shí)候自動(dòng)調(diào)用,用來快速獲取字符串表示的最快捷的方法
<?php //定義一個(gè)類“人們” class Person{ protected $name; protected $age; protected $sex; static $country="中國(guó)"; //聲明一個(gè)常量 const RUN="走"; //構(gòu)造方法 function __construct($name,$age,$sex){ $this->name=$name; $this->age=$age; $this->sex=$sex; } function say(){ echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}。<br>"; } function __toString(){ return self::$country."<br>{$this->name}<br>{$this->age}<br>{$this->sex}<br>".self::RUN; } } $p=new Person("張三",21,"女"); echo $p; ?>
__clone()
克隆對(duì)象使用clone()處理
原本(原來的對(duì)象)
復(fù)本(復(fù)制出來的對(duì)象)
__clone()就是在克隆對(duì)象時(shí)自動(dòng)調(diào)用的方法
只要一個(gè)對(duì)象一創(chuàng)建,就要有初始化的動(dòng)作,和構(gòu)造方法__constuct作用相似
在__clone()方法中的$this關(guān)鍵字代表的是復(fù)本的對(duì)象,$that代表原本對(duì)象
<?php //定義一個(gè)類“人們” class Person{ var $name; protected $age; protected $sex; static $country="中國(guó)"; //聲明一個(gè)常量 const RUN="走"; //構(gòu)造方法 function __construct($name,$age,$sex){ $this->name=$name; $this->age=$age; $this->sex=$sex; } function say(){ echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}。<br>"; } function __clone(){ $this->name="王五"; $this->age=18; $this->sex="男"; } function __destruct(){ echo $this->name."<br>"; } } $p=new Person("張三",21,"女"); $p->say(); //這并不能叫做克隆對(duì)象,因?yàn)樵谖鰳?gòu)時(shí)只析構(gòu)一次 /*$p1=$p; $p1->name="李四"; $p1->say();*/ $p1= clone $p; $p1->say(); ?>
__autoload()
注意:其它的魔術(shù)方法都是在類中添加起作用,這是唯一一個(gè)不在類中添加的方法
只要在頁(yè)面中使用到一個(gè)類,只要用到類名,就會(huì)自動(dòng)將這個(gè)類名傳給這個(gè)參數(shù)
<?php function __autoload($className){ include "./test/".$className.".class.php"; } $o=new One; $o->fun1(); $t=new Two; $t->fun2(); $h=new Three; $h->fun3(); ?>
test里的文件
one.class.php
<?php class One{ function fun1(){ echo "The Class One<br>"; } } ?>
two.class.php
<?php class Two{ function fun2(){ echo "The Class Two<br>"; } } ?>
three.class.php
<?php class Three{ function fun3(){ echo "The Class Three<br>"; } } ?>
對(duì)象串行化(序列化):將一個(gè)對(duì)象轉(zhuǎn)為二進(jìn)制串(對(duì)象是存儲(chǔ)在內(nèi)存中的,容易釋放)
使用時(shí)間:
1.將對(duì)象長(zhǎng)時(shí)間存儲(chǔ)在數(shù)據(jù)庫(kù)或文件中時(shí)
2.將對(duì)象在多個(gè)PHP文件中傳輸時(shí)
serialize(); 參數(shù)是一個(gè)對(duì)象,返回來的就是串行化后的二進(jìn)制串
unserialize(); 參數(shù)就是對(duì)象的二進(jìn)制串,返回來的就是新生成的對(duì)象
__sleep()
是在序列化時(shí)調(diào)用的方法
作用:就是可以將一個(gè)對(duì)象部分串行化
只要這個(gè)方法中返回一個(gè)數(shù)組,數(shù)組中有幾個(gè)成員屬性就序列化幾個(gè)成員屬性,如果不加這個(gè)方法,則所有成員都被序列化
__wakeup()
是在反序列化時(shí)調(diào)用的方法
也是對(duì)象重新誕生的過程
<?php //定義一個(gè)類“人們” class Person{ var $name; protected $age; protected $sex; static $country="中國(guó)"; //聲明一個(gè)常量 const RUN="走"; //構(gòu)造方法 function __construct($name,$age,$sex){ $this->name=$name; $this->age=$age; $this->sex=$sex; } function say(){ echo "我的名字:{$this->name},我的年齡:{$this->age},我的性別:{$this->sex}。<br>"; } function __clone(){ $this->name="王五"; $this->age=18; $this->sex="男"; } //是在序列化時(shí)調(diào)用的方法,可以部分串行化對(duì)象 function __sleep(){ return array("name","age"); } //是在反序列化時(shí)調(diào)用的方法,也是對(duì)象重新誕生的過程??梢愿淖兝锩娴闹? function __wakeup(){ $this->name="sanzhang"; $this->age=$this->age+1; } function __destruct(){ } } ?>
read.php
<?php require "11.php"; $str=file_get_contents("mess.txt"); $p=unserialize($str); echo $p->say(); ?>
write.php
<?php require "11.php"; $p=new Person("張三",18,"男"); $str=serialize($p); file_put_contents("mess.txt",$str); ?>
“PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法的作用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。