使用对象初始化调用静态方法

时间:2016-10-06 06:18:26

标签: php oop

我写了这样的代码

class B
{
   public static function test() {
   echo "Static function called<br/>";
   }
}

B::test();
$ob = new B();
$ob->test();

我阅读了很多文章,使用 :: operator 调用静态函数 但我可以使用对象初始化和::运算符调用测试函数 有什么不同?请解释

1 个答案:

答案 0 :(得分:0)

它与众不同。当你使用::它意味着你直接与班级打交道。当你使用时 - &gt;你正在处理对象。我改变你的样本,告诉你它是如何工作的:

class B
{
   private static $var;

   public static function test() {
      echo self::$var."Static function called<br/>";
   }

   public static function change($value)
   {
    self::$var = $value;
   }
}

B::test();
$ob = new B();
$ob->test();
$ob->change(10);
B::test();

结果将是:

Static function called
Static function called
10Static function called

因为第一次静态$ var并没有任何内容。它只显示字符串。在创建$ ob对象后,我们将STATIC $ var更改为10.之后因为它是STATIC,当你再次使用::时,你可以看到静态var发生了变化。

现在看另一个例子:

class B
{
   private static $var;

   public function test() {
      echo self::$var."function called<br/>";
   }

   public function change($value)
   {
    self::$var = $value;
   }
}

B::test();
$ob = new B();
$ob->test();
$ob->change(10);
B::test();

结果将是:

function called
function called
10function called

因为正如我之前所说,::意味着你直接与班级打交道。

现在看另一个例子:

class B
{
   private $var;

   public function test() {
      echo $this->var."function called<br/>";
   }

   public function change($value)
   {
    $this->$var = $value;
   }
}

$ob = new B();
$ob->test();
$ob->change(10);
B::test();

结果将是:

function called
Fatal error: Uncaught Error: Cannot access empty property

当你创建$ ob时,你有对象。当你使用::你不能有$ var里面测试或更改方法。因为他们有$ this-&gt;在它,它意味着他们正在处理对象。

当您知道这些时,您就知道何时以及如何使用::或 - &gt;