程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 開啟PHP Static 關鍵字之旅模式

開啟PHP Static 關鍵字之旅模式

編輯:PHP綜合

聲明類成員或方法為static,就可以不實例化類而直接訪問。不能通過一個對象來訪問其中的靜態成員(靜態方法除外)。

為了兼容PHP4,如果沒有指定“可見性”,屬性和方法默認為public。

由於靜態方法不需要通過對象即可調用,所以偽變量$this在靜態方法中不可用。

靜態屬性不可以由對象通過->操作符來訪問。

用::方式調用一個非靜態方法會導致一個E_STRICT級別的錯誤。

就像其它所有的PHP靜態變量一樣,靜態屬性只能被初始化為一個字符值或一個常量,不能使用表達式。 所以你可以把靜態屬性初始化為整型或數組,但不能指向另一個變量或函數返回值,也不能指向一個對象。

PHP5.3.0之後,我們可以用一個變量來動態調用類。但該變量的值不能為關鍵字self, parent 或static。

Example #1 靜態成員代碼示例

<?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 . " ";
$foo = new Foo();
print $foo->staticValue() . " ";
print $foo->my_static . " ";   // Undefined "Property" my_static 
print $foo::$my_static . " ";
$classname = 'Foo';
print $classname::$my_static . " "; // PHP 5.3.0之後可以動態調用
print Bar::$my_static . " ";
$bar = new Bar();
print $bar->fooStatic() . " ";
?>

Example #2 靜態方法代碼示例

<?php
class Foo {
  public static function aStaticMethod() {
    // ...
  }
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>

關於static 中靜態變量和靜態方法的總結

靜態變量

靜態變量是只存在於函數作用域的變量,不過,在函數執行完成後,這種變量的值不會丟失,也就是說,在下一次調用這個函數時,變量仍然會記得原來的值。要將某個變量定義為靜態的,只需要在變量前加上 static 關鍵字即可。

在類中,static關鍵字有兩種主要用法,一是用來定義靜態成員,一是用來定義靜態方法。在類的內部,可以使用作用域限定符 (::) 來訪問不同層次作用域的變量。

靜態方法

靜態方法和非靜態方法之間有一個重要的區別:在調用靜態方法時,不再需要擁有類的實例。

靜態方法和非靜態方法使用原則:一是如果某個方法中不包含$this變量,就應該時靜態方法;如果不需要類的實例,可能還應該使用靜態類,這樣可以免去實例化類的工作。另,在靜態方法中時不能使用$this變量的,因為靜態方法不屬於某個特定的實例。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved