亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

能給我講講這段代碼是怎樣運行嗎?

能給我講講這段代碼是怎樣運行嗎?

PHP
錯過了年華 2017-04-05 23:23:07
class?SubObject { ????static?$instances?=?0; ????public?$instance; ????public?function?__construct()?{ ????????$this->instance?=?++self::$instances; ????} ????public?function?__clone()?{ ????????$this->instance?=?++self::$instances; ????} } class?MyCloneable { ????public?$object1; ????public?$object2; ????function?__clone() ????{ ?????? ????????//?強制復制一份this->object,?否則仍然指向同一個對象 ????????$this->object1?=?clone?$this->object1; ????} } $obj?=?new?MyCloneable(); $obj->object1?=?new?SubObject(); $obj->object2?=?new?SubObject(); $obj2?=?clone?$obj; print("Original?Object:\n"); print_r($obj); print("Cloned?Object:\n"); print_r($obj2);
查看完整描述

1 回答

已采納
?
程重吾

TA貢獻2條經驗 獲得超0個贊

首先 print_r 不會輸出對象的靜態屬性和方法 ??

$obj = new MyCloneable();//實例化類對象,這個沒什么好說的

$obj->object1 ?= new SubObject();//當實例化一個類時,構造方法__construct(){},會被自動調用,

此時:

????????????$this->instance = ++self::instances;//靜態成員屬性instances先自增(與self::instances++不同),再賦值給instance,此時值為1,(也就是說 ?static?$instances?= 1)注意該值的變化

$obj->object2 = new SubObject();//這里同上 ?此時instance的值是2了 ? static?$instances?= 2;?

所以print_r($obj)輸出結果(關注instance的值):

????????????對象object1里面的instance 的值是 ?1

????????????對象object2里面的instance 的值是 ?2

接下來分析:$obj2 = clone $obj;//克隆一個對象,當克隆一個對象時,會自動調用該對象的__clone(){}方法

所以接下來 $obj該對象的克隆方法會被調用,$obj 是通過 new MyCloneable該類獲得的,那么

????????__clone(){

?????????????????$this->object1?=?clone?$this->object1;//該代碼被調用

}

接著分析????$this->object1?=?clone?$this->object1;//該對象的成員屬性object1 克隆自己 ?,因此:

該成員屬性object1的 克隆方法 也會被調用 ? (注意:object1 是一個對象,他是怎么來的?)

通過new SubObject該類獲得的,所以

????????該對象的克隆方法是

????????public?function?__clone()?{

????????$this->instance?=?++self::$instances;//該代碼被調用,上面解釋過該代碼了,static?$instances?= 3;

????????}

?????所以print_r($obj2);結果是:

????????????對象object1里面的instance 的值是 ?3

????????????對象object2里面的instance 的值是 ?2 ?(這里沒變)


查看完整回答
反對 回復 2017-04-10
  • 錯過了年華
    錯過了年華
    打這么多字辛苦了,print_r是輸出成員屬性?
  • 程重吾
    程重吾
    很多時候自己動手一試就知道了,而且影響深刻
  • 1 回答
  • 2 關注
  • 1452 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號