类中使用的PHP类?

类中使用的PHP类?,php,class,Php,Class,我知道$something->function()在类中调用函数,但什么是$something->somethingelse->function()意思?我猜你的意思是$something->somethingelse->function() 这意味着名为$somethingelse的$something>属性是另一个具有方法function()的对象 实例$something的类包含一个名为$somethingelse的实例变量,该变量也是一个对象(类的实例) 这被认为是一种不好的做法(参见)

我知道
$something->function()
在类中调用函数,但什么是
$something->somethingelse->function()意思?

我猜你的意思是
$something->somethingelse->function()

这意味着名为
$somethingelse
$something>属性是另一个具有方法
function()
的对象


实例$something的类包含一个名为$somethingelse的实例变量,该变量也是一个对象(类的实例)

这被认为是一种不好的做法(参见)

彼得·范·鲁伊金的故事有一个很好的解释:

你可以自己玩

你可以玩你自己的玩具(但你不能把它们拆开)

你可以玩给你的玩具

你可以玩你自己做的玩具

用通俗易懂的英语说:

您的方法可以直接调用其类中的其他方法

您的方法可以直接在自己的字段上调用方法(但不能在字段的字段上)

当您的方法获取参数时,您的方法可以直接调用这些参数上的方法

当您的方法创建本地对象时,该方法可以调用 本地对象

但是

不应该对全局对象调用方法

在a的类以外的其他类中,不应该有一个消息链a.getB().getC().doSomething()


另一个有趣的阅读是关于不那么严格的方法。

你可以这样说:

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

你确定它是
$something->$somethingelse->function()而不是
$something->somethingelse->function()
$something->somethingelse()->function()?哦,这是为了什么?@user658911目的是在该类中拥有该对象的功能。它被称为模式,所以你会用它来使用一个数据库对象,比如$addusers->db=$db;其中$db是一个类。@例如,用户是的,没错。我不同意这通常是一种不好的做法。像这样的模式如果没有itdependency注入就无法工作,而是将$somethingelse的实例注入到$something中,而不必使用新的inside$something创建它(这将巩固依赖关系)。它不是关于公开那些依赖项,什么应该是类的“私有部分”。你可以让它只写一个setter。我改变了它,所以它的工作原理完全一样。我不知道var被弃用了-谢谢
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