【发布时间】:2011-10-24 19:33:24
【问题描述】:
参考http://php.net/manual/en/language.oop5.static.php,
将类属性或方法声明为静态使它们无需实例化即可访问。声明为静态的属性不能用实例化的类对象访问(尽管静态方法可以)。
为什么示例在打印 $foo::$my_static 之前实例化类 ($foo = new Foo();)? 只按上面的说法
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();
?>
上面的例子没有给出任何错误。 使用实例化的类对象访问静态方法是一种好习惯吗?
谢谢。
【问题讨论】: