我想可能没有任何差别,但个人偏好,但在阅读各种PHP代码时,我遇到了两种方法来访问方法类。
的区别是什么:
class Myclass
{
public static $foo;
public static function myMethod ()
{
// between:
self::$foo;
// and
MyClass::$foo;
}
}
答案 0 :(得分:34)
(注:初始版本表示没有差异。实际上有)
确实存在很小的差异。 self::
转发静态呼叫,而className::
则不转发。这仅适用于PHP 5.3 +中的late static bindings。
在静态调用中,PHP 5.3+会记住最初调用的类。使用className::
会使PHP“忘记”此值(即将其重置为className
),而self::
会保留它。考虑:
<?php
class A {
static function foo() {
echo get_called_class();
}
}
class B extends A {
static function bar() {
self::foo();
}
static function baz() {
B::foo();
}
}
class C extends B {}
C::bar(); //C
C::baz(); //B
答案 1 :(得分:1)
使用self,你可以在课堂上使用它,并使用“MyClass”,你可以在外部引用它:
$instance = new Myclass();
$variable = $instance::$foo