亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP面向對象程序設計之對象克隆clone和魔術方法__clone()用法分析

2024-05-05 00:09:33
字體:
來源:轉載
供稿:網友

本文實例講述了PHP面向對象程序設計之對象克隆clone和魔術方法__clone()用法。分享給大家供大家參考,具體如下:

1.對象克隆 clone

PHP4面向對象功能一個很大的缺點,是將對象視為另一種數據類型,這使得很多常見的OOP方法無法使用,如設計模式。這些方法依賴于將對象作為引用傳遞給其他類方法,而不是作為值傳遞,而按值傳遞卻是PHP的默認做法。幸好,PHP5解決了這個問題,現在所有對象在默認情況下都被視為引用。但是,由于所有對象都被視為引用而不是值,所以現在復制對象更為困難。如果嘗試復制一個引用的對象,這只會指向原對象的地址位置。為了解決復制問題,PHP提供了一種克隆clone(關鍵字,不是方法)對象的顯式方法。

可以在對象前面加clone關鍵字來克隆對象,如下:

destinationObject = clone targetObject;

克隆對象:

<?phpclass Person{  var $name;  var $sex;  var $age;  function __construct($name, $sex, $age){    $this->name = $name;    $this->sex = $sex;    $this->age = $age;  }  function say(){    echo "我的名字:" . $this->name . ",性別:" . $this->sex . ",年齡:" .$this->age . "<br />";  }}$person1 = new Person("張三三", "男", 23);$person2 = clone $person1;  //使用clone關鍵字克隆/復制對象,創建一個對象的副本$person3 = $person1;  //這不是復制對象,而是為對象多復制出一個訪問該對象的引用$person1->say();  //調用原對象中的說話方式,打印原對象中的全部屬性值$person2->say();  //調用副本對象中的說話方式,打印克隆對象中的全部屬性值$person3->say();  //調用原對象中的說話方式,打印原對象中的全部屬性值?>

2.魔術方法__clone()

在上面的程序中一共創建了兩個對象,其中有一個對象是通過clone關鍵字克隆出來的副本。兩個對象完全能獨立,但他們中的成員及屬性的值完全一樣。如果需要對克隆后的副本對象在克隆時重新為成員屬性賦初值,則可以在類中聲明一個魔術方法“__clone()”。該方法是在對象克隆時自動調用的,所以就可以通過此方法對克隆后的副本重新初始化。__clone()方法不需要任何參數。將上例中的代碼改寫一下,在類中添加魔術方法__clone(),為副本對象中的成員屬性重新初始化。

<?phpclass Person{  var $name;  var $sex;  var $age;  function __construct($name, $sex, $age){    $this->name = $name;    $this->sex = $sex;    $this->age = $age;  }  function say(){    echo "我的名字:" . $this->name . ",性別:" . $this->sex . ",年齡:" .$this->age . "<br />";  }  function __clone(){    $this->name = "李四四";  //為副本對象中的name屬性重新賦值    $this->age = 10;  //為副本對象中的age屬性重新賦值  }}$person1 = new Person("張三三", "男", 23);$person2 = clone $person1; //創建一個對象的副本,并自動調用類中的__clone()方法$person1->say();  //調用原對象中的說話方式,打印原對象中的全部屬性值$person2->say();  //調用副本對象中的說話方式,打印克隆對象中的全部屬性值?>

運行結果:

我的名字:張三三,性別:男,年齡:23
我的名字:李四四,性別:男,年齡:10

3.單例類的加強:禁止克隆

對于一個類的對象,如果使用“clone運算符”,就會復制出一個和當前對象完全一樣的新對象出來,并且,此時還會自動調用該類的魔術方法:__clone()(只要該類中有該方法)。

則要實現單例類,就應該對這個單例類的對象“禁止克隆”。在PHP中,為防止對單例類對象的克隆來打破單例類的上述實現形式,通常還為其提供一個空的私有 (private修飾的)__clone()方法。

首先來看“未做禁止克隆”的效果:

<?phpclass SingetonBasic {  private static $instance; //靜態變量要私有化,防止類外修改  private function __construct() {  //構造函數私有化,類外不能直接新建對象}//private function __clone() {} //在__clone()前用private修飾,用來禁止克隆public static function getInstance() { //公共的靜態方法,public——外部的接口,static——不使用對象而是通過類名訪問  if (!(self::$instance instanceof self)) { //私有靜態變量$instance為空    self::$instance = new self(); //新建為自身的對象,并賦值給私有變量$instance  }  return self::$instance; //返回私有變量$instance}}$a = SingetonBasic::getInstance();$b = SingetonBasic::getInstance();var_dump($a === $b);  //結果為:boolean true   a和b指向的是同一個對象$c = clone $a;var_dump($a === $c); //結果為:boolean false   a和c指向的不是同一個對象?>

運行結果為

boolean true

boolean false

我們“作禁止克隆”處理,即把上面代碼中的

private function __clone() {}  //在__clone()前用private修飾,用來禁止克隆

這行代碼去掉注釋。

運行結果為

boolean true

Fatal error: Call to private SingetonBasic::__clone()

也就是,在克隆的時候,自動調用了__clone(),但是該方法被private修飾,不能再類的外部直接調用,結果報錯。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美黑人xxx| 国产精品∨欧美精品v日韩精品| 欧美性猛交丰臀xxxxx网站| 国产午夜精品全部视频在线播放| 国产综合福利在线| 日韩成人中文字幕| 亚洲国产欧美自拍| 精品亚洲夜色av98在线观看| 欧美成年人在线观看| 精品久久久久久国产| 欧美午夜美女看片| 国产欧美日韩专区发布| 亚洲精品视频网上网址在线观看| 久久亚洲精品中文字幕冲田杏梨| 91免费在线视频| 久久久久久国产精品美女| 狠狠色香婷婷久久亚洲精品| 国产欧美精品一区二区三区-老狼| 久热精品视频在线免费观看| 在线一区二区日韩| 国产色婷婷国产综合在线理论片a| 在线播放日韩av| 欧美日韩一区二区三区在线免费观看| 97av视频在线| 欧美国产精品日韩| 亚洲精品福利免费在线观看| 亚洲国产天堂久久综合网| 精品国产拍在线观看| 色综合色综合网色综合| 日本不卡视频在线播放| 国产精品久久久av| 欧美极度另类性三渗透| 日韩欧美在线免费| 亚洲美女av在线播放| 日韩高清av一区二区三区| 欧美大尺度激情区在线播放| 亚洲精品videossex少妇| 68精品久久久久久欧美| 亚洲va欧美va在线观看| 黑人极品videos精品欧美裸| 久久久久久久网站| 久久久久99精品久久久久| 亚洲人成网站免费播放| 精品国产91乱高清在线观看| 亚洲男人天堂久| 欧美精品久久久久久久久久| wwwwwwww亚洲| 亚洲国产成人av在线| 欧美精品久久久久| 日韩美女免费线视频| 欧美日韩另类在线| 久久成人精品视频| 成人日韩在线电影| 欧美在线免费视频| 中文字幕日本欧美| 欧美午夜精品久久久久久久| 一个人看的www久久| 欧美精品一本久久男人的天堂| 国产丝袜精品视频| 精品国模在线视频| 日日噜噜噜夜夜爽亚洲精品| 日韩福利在线播放| 亚洲色图13p| 中文字幕少妇一区二区三区| 亚洲乱亚洲乱妇无码| 久久综合伊人77777蜜臀| 亚洲成av人乱码色午夜| 国产精品日韩精品| 欧美精品18videos性欧| 亚洲新中文字幕| 在线视频日本亚洲性| 成人中文字幕在线观看| 26uuu另类亚洲欧美日本一| 欧美一区二区三区艳史| 欧美综合第一页| 亚洲欧美日韩另类| 日韩激情片免费| 欧美高清在线播放| 亚洲国产一区二区三区在线观看| 久久亚洲成人精品| 亚洲福利在线看| 亚洲成人久久网| 黄色91在线观看| 国产91九色视频| 97在线视频一区| 色悠悠久久久久| 亚洲影院污污.| 国产精品69久久久久| 欧美一区二区三区艳史| 久久综合久久美利坚合众国| 久久影视电视剧免费网站清宫辞电视| 性色av一区二区三区在线观看| 日韩中文字幕av| 国产精品va在线播放| 欧美精品免费看| 国产成人在线精品| 欧美日韩免费在线观看| 在线观看中文字幕亚洲| 欧美精品999| 78色国产精品| 色99之美女主播在线视频| 91亚洲永久免费精品| 国产欧美日韩视频| 久久影视电视剧免费网站| 日韩av色在线| 成人在线播放av| 欧美日本亚洲视频| 中文国产亚洲喷潮| 精品偷拍一区二区三区在线看| 国产成人综合精品在线| 欧美国产日韩一区二区在线观看| 麻豆一区二区在线观看| 国产一区二区久久精品| 97超碰国产精品女人人人爽| 国产精品日韩电影| 精品久久香蕉国产线看观看gif| 欧美肥老妇视频| 日本三级韩国三级久久| 国语自产精品视频在线看一大j8| 亚洲成人教育av| 欧美日韩国产va另类| 国产精品91一区| 国产精品v片在线观看不卡| 成人激情视频小说免费下载| 国产一区二中文字幕在线看| 久久久久久久激情视频| 日韩欧美中文第一页| 亚洲最大av网站| 91九色视频在线| 久久伊人精品一区二区三区| 亚洲乱码av中文一区二区| 国产91精品最新在线播放| 亚洲日韩第一页| 久久久久久久91| 九九综合九九综合| 日韩美女在线观看一区| 欧美激情视频在线免费观看 欧美视频免费一| 国产高清在线不卡| 日韩一二三在线视频播| 久久精品国产精品亚洲| 97香蕉久久超级碰碰高清版| 亚洲成人激情小说| 亚洲深夜福利在线| 国产日韩欧美在线观看| 亚洲黄色有码视频| 午夜精品在线视频| 亚洲va电影大全| 亚洲字幕在线观看| 91精品久久久久久久久中文字幕| 92看片淫黄大片欧美看国产片| 91中文精品字幕在线视频| 国内精品模特av私拍在线观看| 精品成人国产在线观看男人呻吟| 亚洲免费中文字幕| 中文字幕亚洲综合久久| 亚洲老头同性xxxxx| 最近的2019中文字幕免费一页| 亚洲九九九在线观看| 日韩国产在线播放| 一区二区在线免费视频| 欧美激情一级精品国产| 中文字幕少妇一区二区三区| 国产精品成人av在线| 久久久精品美女|