我有一个这样的课:
我想知道以下命令之间有什么区别,哪一个更好?
Class foo
{
function test()
{
return false;
}
function test2()
{
return self::test();
}
function test3()
{
return foo::test();
}
static function test4()
{
return false;
}
function test5()
{
return self::test4();
}
function test6()
{
return static::test4();
}
}
1 - self::test();
和foo::test();
之间有什么不同?
2 - self::test4();
和static::test4();
之间有什么不同?
请解释一下??
答案 0 :(得分:2)
1 - 在self :: test()之间有什么不同;和foo :: test(); ?
它是相同的,如果在课程范围内使用,self::
会更好,更改课程名称时不必更改代码。
2 - 在self :: test4()之间有什么不同;和static :: test4(); ?
static::test4()
从php 5.3实现为 Late Static Bindings 羽毛,可用于在静态继承的上下文中引用被调用的类。
答案 1 :(得分:1)
简单地说: self - 引用您所在的类。而 class_name 可以在类本身之外调用类方法。
即 - 当你想在&f; foo'之外调用test6时 - 您无法通过“自我”调用它,您必须通过“foo ::'”来调用它。
哪一个更好?
正如我解释的那样。当自己在课堂上写作时,请使用“自我”。 - 这只是最佳实践'。
答案 2 :(得分:0)
function test2()
{
return self::test();
}
function test3()
{
return foo::test();
}
它们都以相同的方式工作,但是当你想要重命名你的课程时; self
仍会指向正确的类,但必须重命名foo
。
更好的方法是使用$this->test()
。
function test5()
{
return self::test4();
}
function test6()
{
return static::test4();
}
后者应用“后期静态绑定”,因此在扩展此类时会有所不同,例如:
class bar extends foo
{
function test4() { return true; }
}
$b = new bar;
然后,当$b->test6()
被调用时,它将返回true
。