1.應用場景
瞭解PHP對象的用法. 合理使用其進行開發. |
2.學習/操作
1. PHP對象到底是值傳遞還是引用傳遞
手冊: 在php5 的對象編程經常提到的一個關鍵點是“默認情況下對象是通過引用傳遞的”。但其實這不是完全正確的。 下面通過一些例子來說明。 PHP 的引用是別名,就是兩個不同的變量名字指向相同的內容。 在 PHP 5,一個對象變量已經不再保存整個對象的值。只是保存一個標識符來訪問真正的對象內容。 當對象作爲參數傳遞,作爲結果返回, 或者賦值給另外一個變量,另外一個變量跟原來的不是引用的關係,只是他們都保存着同一個標識符的拷貝,這個標識符指向同一個對象的真正內容。
手冊上例子: 這裏省略.
代碼執行情況:
網友一: 對象在函數中是引用傳遞 即使賦值給其它變量,也是引用 但是改變了$a的類型,準確的說是zval.value指針都變化了,所以此時產生了分裂。
所以: 儘量避免函數內操作外部對象,否則有可能造成致命性的邏輯錯誤,特別是改變對象數據的時候。
網友二: $a和$b是同一個標示符的拷貝,都是指向同一個對象A,所以你改變$a或者$b的屬性, 其實也就是改變的同一個對象A的屬性, 但是$a和$b是兩個不同的變量,他們兩個不是引用關係。
網友三: 其實 而當你設置了
關鍵點: 造成這種疑問的,都是把引用當成指針去理解了.
個人建議: 不要輕易去操作對象, 如果可以使用數組去代替.
後續補充 ... |
3.問題/補充
TBD |
4.參考
https://www.php.net/manual/zh/language.oop5.references.php https://segmentfault.com/q/1010000010641993?_ea=2363326 //PHP對象到底是值傳遞還是引用傳遞 https://www.cnblogs.com/aademeng/articles/9194688.html //PHP中對象是按值傳遞還是按引用傳遞? |
後續補充
...