Я думаю, что не может быть никакой разницы, кроме личных предпочтений, но при чтении различного PHP-кода я сталкиваюсь с обоими способами доступа к классу методов.
В чем есть разница:
class Myclass
{
public static $foo;
public static function myMethod ()
{
// between:
self::$foo;
// and
MyClass::$foo;
}
}
(Примечание: в первоначальной версии говорилось, что разницы нет. На самом деле она есть)
Действительно, есть небольшая разница. self::
перенаправляет статические вызовы, а className:::
- нет. Это имеет значение только для поздних статических привязок в PHP 5.3+.
В статических вызовах PHP 5.3+ запоминает первоначально вызванный класс. Использование className::
заставляет PHP "забыть" это значение (т.е. сбрасывает его на className
), в то время как self::
сохраняет его. Consider:
<?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
С self вы можете использовать его внутри класса, а с MyClass, как и у вас, вы можете ссылаться на него извне:
$instance = new Myclass();
$variable = $instance::$foo