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