我知道$something->function();
正在調用一個類中的函數,但$something->somethingelse->function();
是什麼意思?類中使用的PHP類?
回答
我假設你的意思是$something->somethingelse->function()
。
這意味着名爲$somethingelse
的$something
的屬性是另一個具有方法function()
的對象。
$something = new Class1();
$something->somethingelse = new Class2(); // Class2 has the "function()" method
// Now I can call...
$something->somethingelse->function();
類實例美元的東西包含一個名爲$ somethingelse實例變量,這也是一個對象(類的實例)。
這被認爲是不好的做法(請參閱Law of Demeter on Wikipedia)。
彼得·範·Rooijen的Law of Demeter is on c2.com的一個很好的解釋是:
你可以自己玩。
您可以用自己玩玩具(但你不能把他們分開),
您可以用被給了你,玩玩具。
你可以玩你自己製作的玩具。
以純英文:
你的方法可以調用其他同類方法直接
你的方法可以調用直接自身的字段的方法(但不是在字段的字段)
當您的方法接受參數時,您的方法可以直接調用這些參數的方法。
當您的方法創建本地對象時,該方法可以調用本地對象上的方法。
但
人不應該調用全局對象的方法
一個人不應該有消息的鏈a.getB()。GETC()。DoSomething的()中的一些類除了班級以外。
另一個有趣的閱讀是對Law of Demeter Revisited不太嚴格的方法。
我不同意這是一般不好的做法。諸如[依賴注入](http://en.wikipedia.org/wiki/Dependency_Injection)之類的模式在沒有它的情況下無法工作 –
依賴注入雖然是關於在$ something中注入$ somethingelse的實例,而無需使用它創建它新的內部$東西(這將鞏固依賴)。這不是揭示這些依賴關係,應該是什麼應該是一個班級的「私人部分」。你只能用setter寫它。 – stivlo
你可以說這是這樣的:
class foo {
public $bar;
}
class bar {
public $baz;
}
class baz {
function blip() { echo "Hello World"; }
}
$foo = new foo();
$foo->bar = new bar(); // setting bar to new object
$foo->bar->baz = new baz(); // setting baz to new object
$foo->bar->baz->blip(); // calling the blip function
我改變了它,所以它的作品完全一樣。我沒有意識到var已被棄用 - 謝謝 –
- 1. PHP使用類
- 2. 在PHP中使用ZipArchive類
- 3. 在PHP中使用COM類
- 4. 在PHP中使用類
- 5. 使用類的PHP類方法
- 6. AJAX使用php類
- 7. PHP mcrypt使用類?
- 8. PHP中類中的類
- 9. 在PHP中使用類(PHP 5.4.9版本)
- 10. 使用Ajax的PHP類值
- 11. 使用檢查的PHP類
- 12. foreach與類的使用php
- 13. PHP PDO類在不同的類中使用(不起作用)
- 14. 如何在PHP中使用另一個類中的類?
- 15. 使用PHP禁用div類中的href按鈕使用PHP
- 16. OOP類中的PHP FILTER_CALLBACK類
- 17. 在PHP中使用workTime類的問題
- 18. 使用php類中的變量
- 19. PHP使用類中的函數
- 20. PHP包括主php類中的mysqli()類
- 21. 在Struts中使用類似Java Action的PHP類?
- 22. 使用PHP從一個類中提取href的類?
- 23. 如何使用final類作爲界面中的類型(php)
- 24. php使用類功能,查詢其他類中的數據庫
- 25. PHP OOP:如何在其他類中使用通用MySQL類
- 26. 如何在PHP中使用類常量到類屬性中?
- 27. PHP PDO類內存使用
- 28. 應該使用PHP類嗎?
- 29. 使用PHP加載C#類
- 30. PHP和MySQL使用PDO類
你確定它的'$東西 - > $ somethingelse->函數();'而不是'$ something-> somethingelse->函數();'或'$ something-> somethingelse() - > function();'? – Shef
http://php.net/oop5 – salathe
@shef謝謝.... – Vish