通过 - >访问类方法有什么区别?并通过::?

时间:2011-07-08 05:18:29

标签: php

通过 - >访问类方法有什么区别?并通过::?

4 个答案:

答案 0 :(得分:6)

->用于访问实例化对象的属性和方法。 ::用于访问静态方法,常量或重写方法。

了解更多信息:

答案 1 :(得分:4)

::用于访问静态方法或属性,因此您不必实例化包含类的对象。

->用于访问实例化对象的方法或属性。

答案 2 :(得分:2)

使用->表示基于实例的访问方法(它保留对象的状态,例如私有/公共变量集)。

::是一个静态方法,意味着如果对象已初始化或尚未初始化,则它没有条形,但这些方法与此对象有关。


想象如下:

class Mustang
{
  var $gallons = 12; // gallons

  public function getFuel()
  {
    return $this->gallons;
  }

  public static function getEngine()
  {
    return "V8";
  }
}

$mustang = new Mustang(); // creating an instance

echo $mustang->getFuel(); // retrieve the fuel (instance, _this_ mustang)

echo Mustang::getEngine(); // echo a stat about Mustangs in general (static)

如果你有一个“野马”的实例,每个实例都可以(假设)有一定量的燃料(这是基于实例的,可以使用->访问)。

如果你想要一些仍然属于野马的东西,但对特定实例本身没有任何限制,你会引用静态方法(在这种情况下,所有野马都有一个V8,在这种情况下象征着{{1} })。

答案 3 :(得分:1)

弗朗索瓦所说的是正确的。 ::运算符称为Scope Resolution Operator ....和(信不信由你)称为 paamayim-nekudotayim 。在访问的静态,常量和重写成员时使用它。我强调类,因为它不用于特定的对象。您可以将范围解析运算符视为类本身的元;它对自己及其父母起作用​​。 (考虑一下,类常量不属于任何特定对象,因此您不会使用->

这将我们带到了什么是->?它用于操作对象而不是。创建特定对象时,可以使用此运算符访问其属性和方法。例如:

$john = new User(); //create the object
$john->age = 10; //accessing an object property
$age = $john->getAge(); //accessing an object method