6.如果没有明确的关键字(private,protected)限定,类的属性和方法默认为公有。
[TOC]
## **Static**
声明类属性或方法为静态,就可以不实例化类而直接访问。
静态属性的使用:
* 在类中,通过`self::静态属性名`访问。
* 在类外,通过`类名::静态属性名`访问。
* 不能通过一个类已实例化的对象来访问。
* 不可以由对象通过 -> 操作符来访问。
* 只能被初始化为文字或常量(整数或数组),不能使用表达式。
* 不能初始化为另一个变量或函数返回值,也不能指向一个对象。
静态方法的使用:
* 在类中,通过`self::静态方法名()`访问。
* 在类外,通过`类名::静态方法名()`访问; 或者通过一个类已实例化的对象通过`对象变量名->静态方法名()`访问。
* 在静态方法中只能访问静态属性/方法,所以类没有实例化对象的时候,伪变量` $this` 在静态方法中不可用。
* 用静态方式调用一个非静态方法会导致一个 **`E_STRICT`** 级别的错误。
>[info] 自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 *self*,*parent* 或 *static*。
示例:
~~~php
<?php
class Foo
{
public static $my_static = 'foo';
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->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
</programlisting>
</example>
<example>
<title>静态方法示例</title>
<programlisting role="php">
<