我理解$something->function();
正在调用类中的函数,但$something->somethingelse->function();
是什么意思?
答案 0 :(得分:1)
我认为你的意思是$something->somethingelse->function()
。
这意味着名为$something
的{{1}}属性是具有方法$somethingelse
的另一个对象。
function()
答案 1 :(得分:1)
你可以这样说:
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
答案 2 :(得分:0)
实例$ some的类包含一个名为$ somethingelse的实例变量,它也是一个对象(类的实例)。
这被认为是一种不好的做法(见Law of Demeter on Wikipedia)。
Peter Van Rooijen Law of Demeter is on c2.com的一个很好的解释是:
你可以自己玩。
你可以玩自己的玩具(但你不能将它们分开),
你可以玩给你的玩具。
你可以玩自己制作的玩具。
那是用简单的英语:
您的方法可以直接调用其类中的其他方法
您的方法可以直接在自己的字段上调用方法(但不能在字段的字段上调用)
当你的方法接受参数时,你的方法可以直接调用这些参数的方法。
当您的方法创建本地对象时,该方法可以调用方法 本地对象。
BUT
不应该在全局对象上调用方法
除了一个类之外,其他类中不应该有一个消息链a.getB()。getC()。doSomething()。
另一个有趣的读物是Law of Demeter Revisited,用于不太严格的方法。