我写了这样的代码
class B
{
public static function test() {
echo "Static function called<br/>";
}
}
B::test();
$ob = new B();
$ob->test();
我阅读了很多文章,使用 :: operator 调用静态函数 但我可以使用对象初始化和::运算符调用测试函数 有什么不同?请解释
答案 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;