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">
<