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

為了賬號安全,請及時綁定郵箱和手機立即綁定

php類和對象之創建一個對象

<?php
//定義一個Car類并實例化一個對象
class?Car{
?public?$name='car';
?public?function?getName(){
?????return?$this->name;
?}
}
$car=new?Car();
//?$car->name='adfa';
echo?$car->getName();
?>

為什么當實例化對象$car->name屬性注釋掉,返回的結果是car;如果沒有注釋掉,返回的結果是adfa,不太理解以及this指針在這里的作用

正在回答

5 回答

name在這里是類的屬性,即這個類的對象的公共屬性,

代碼為你演示的重點是類的屬性和方法之間的調用,即在外部如何通過方法調用屬性。

實際案例中,經常是將將類的屬性設置為保護或私有,如果需要用到該屬性,只能在類中通過方法獲取和賦值,

而不能在外部通過類名->屬性名獲取或賦值。

如代碼中的get方法獲取,同理賦值也在類內部,防止像$car->name=''的外部隨意賦值的情況。

至于原因呀,太多說不完,安全/規范/資源等等拉。

你比我強的是,我以前學的時候都不會思考這種情形,只會按部就班來什么學什么。

2 回復 有任何疑惑可以回復我~
#1

qq_薯條配可樂_03787165 提問者

非常感謝!
2016-11-06 回復 有任何疑惑可以回復我~

我的理解,假如你家有各種車。 你老婆說開車送我,這個車沒特指(你只知道開車,沒特指哪一輛,你腦子里只有“開車”,echo 開車;)。假設你是死腦筋,這車就開不了,因為他沒說開哪輛。這個車就類似那個 類 的概念。

然后你老婆又說,開奧迪,這就是實例化了,你腦子里有了“開奧迪”, echo 開奧迪;。

1 回復 有任何疑惑可以回復我~

just for demonstration!

0 回復 有任何疑惑可以回復我~

我理解了你說的意思,可是我覺得在實際案例中有必要聲明類的name屬性嗎(public?$name='car';)?他要獲取的應該是實例化對象的name,為什么此案例中還寫了這一句呢?

0 回復 有任何疑惑可以回復我~

$this是指這個對象本身,注釋掉的時候走的流程:實例化對象-->調用方法getName-->getName獲得對象的name屬性,也就是car;而沒有注釋時,實例化對象-->給對象的name屬性重新賦值為adfa-->調用方法getName-->getName獲得對象的name屬性(已經重新賦值為adfa),所以輸出為adfa。簡單的說,注釋掉輸出的是初始的name屬性,沒注釋輸出的是重新賦值后的name屬性。希望說清楚了

1 回復 有任何疑惑可以回復我~
#1

qq_薯條配可樂_03787165 提問者

我理解了你說的意思,可是我覺得在實際案例中有必要聲明類的name屬性嗎(public $name='car';)?他要獲取的應該是實例化對象的name,為什么此案例中還寫了這一句呢?
2016-11-06 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
PHP進階篇
  • 參與學習       181921    人
  • 解答問題       2668    個

輕松學習PHP中級課程,進行全面了解,用PHP快速開發網站程序

進入課程

php類和對象之創建一個對象

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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