Ссылаясь на http://php.net/manual/en/language.oop5.static.php,
Объявление свойств или методов класса как статических делает их доступными без необходимости создания экземпляра класса. К свойству, объявленному как статическое, нельзя получить доступ с помощью экземпляра объекта класса (хотя статический метод может).
Почему в примере создается экземпляр класса ($ foo = new Foo ();) перед печатью $ foo :: $ my_static?
Согласно приведенному выше заявлению только
print Foo::$my_static
ИЛИ
$classname = 'Foo';
print $classname::$my_static
правильно.
example1.php
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
?>
example2.php
<?php
class Foo{
static $myVar="foo";
public static function aStaticMethod(){
return self::$myVar;
}
}
$foo=new Foo;
print $foo->aStaticMethod();
?>
Приведенный выше пример не дает никакой ошибки.
Это хорошая практика для доступа к статическому методу с экземпляром объекта класса?
спасибо.