php靜態屬性
實例化的對象不能訪問靜態屬性,但是沒有說不能用實例化的對象方法訪問靜態屬性。
意思是不能通過($對象名->靜態變數)這種方式訪問
可以通過$foo::$my_static; 來訪問
⑵ 什麼時候該使用PHP的static屬性和方法
static在使用上,有兩種基本模式:
function test() {
static $prop;
}
class Test {
public static $prop;
}
function裡面的static,更像是function的一個私有屬性。function的static,只在該function內可見,對外是無法訪問到的。
類static,就不用解釋了。一個Class,在未實例化時,只存在靜態方法和靜態屬性。Class的static,是可被外部訪問的(私有或保護屬性,可通過介面訪問)。
static賦值,等號右邊只能賦值靜態常量、數組結構、字元串、數字。
function test() {
static $prop1 = [];
static $prop2 = PHP_SAPI;
static $prop3 = 'prop3';
static $prop4 = empty($_SERVER['HTTP_HOST']); // 錯誤
static $prop5 = $_SERVER['HTTP_HOST']; // 也錯誤
}
⑶ php面向對象static是什麼意思
php中的變數作用范圍的另一個重要特性就是靜態變數(static 變數)。靜態變數僅在局部函數域中存在且只被初始化一次,當程序執行離開此作用域時,其值不會消失,會使用上次執行的結果。
<?php
function Test()
{
$w3sky = 0;
echo $w3sky;
$w3sky++;
}
?> 本函數每次調用時都會將 $w3sky 的值設為 0 並輸出 "0"。將變數加一的 $w3sky++ 沒有其到效果,因為一旦退出本函數則變數 $w3sky 就不存在了。要寫一個不會丟失本次計數值的計數函數,要將變數 $w3sky 定義為靜態(static)的:
如下:
<?php
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?> 本函數每調用Test()都會輸出 $w3sky 的值並加一。
靜態變數也提供了一種處理遞歸函數的方法。遞歸函數是一種自己調用自己的方法。寫遞歸函數時要小心,因為可能會無窮遞歸下去,沒有出口.務必確保 有方法來中止遞歸。以下這個簡單的函數遞歸計數到 10,使用靜態變數 $count 來判斷何時停止:
靜態變數與遞歸函數的例子:
<?PHP
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?> 注: 靜態變數可以按照上面的例子聲明。如果在聲明中用表達式的結果對其賦值會導致解析錯誤。
聲明靜態變數例子:
<?PHP
function foo(){
static $int = 0;// correct
static $int = 1+2; // wrong (as it is an expression)
static $int = sqrt(121); // wrong (as it is an expression too)
$int++;
echo $int;
}
?>
⑷ 誰知道PHP中靜態變數是什麼意思急!
靜態變數,簡單的說,就是一種在特定范圍內一直存在的變數,你可以把全局變數當作一種靜態變數,它的值在代碼運行期間一直存在。
通常來說,靜態局部變數大多用於特殊場合里,比如,當在某函數中,希望每次運行函數時,都使用上次函數的結果,此時除使用全局變數外,就可以使用靜態變數。
以下是關於靜態局部變數特點的一些資料說明:
1.不會隨著函數的調用和退出而發生變化,不過,盡管該變數還繼續存在,但不能使用它。倘若再次調用定義它的函數時,它又可繼續使用,而且保存了前次被調用後留下的值。
2.靜態局部變數只會初始化一次。
3.靜態屬性只能被初始化為一個字元值或一個常量,不能使用表達式。即使局部靜態變數定義時沒有賦初值,系統會自動賦初值0(對數值型變數)或空字元(對字元變數);靜態變數的初始值為0。
4.當多次調用一個函數且要求在調用之間保留某些變數的值時,可考慮採用靜態局部變數。雖然用全局變數也可以達到上述目的,但全局變數有時會造成意外的副作用,因此仍以採用局部靜態變數為宜。
PHP里,定義靜態變數使用static 進行修飾。比如
static$avar=0;
⑸ PHP 5.0對象模型深度探索之類的靜態成員
靜態屬性包含在類中要封裝的數據,可以由所有類的實例共享。實際上,除了屬於一個固定的類並限制訪問方式外,類的靜態屬性非常類似於函數的全局變數。
我們在下例中使用了一個靜態屬性Counter::$count。它屬於Counter類,而不屬於任何Counter的實例。你不能用this來引用它,但可以用self或其它有效的命名表達。在例子中,getCount方法返回self::$count,而不是Counter::$count。
靜態方法則實現類需要封裝的功能,與特定的對象無關. 靜態方法非常類似於全局函數. 靜態方法可以完全訪問類的屬性,也可以由對象的實例來訪問,不論訪問的限定語是否是什麼.
在前文的例子中,getCount是一個普通的方法,用->來調用. PHP建立一個this變數,盡管方法沒有使用到.但是,getCount不屬於任何對象.在有些情況下,我們甚至希望在不存在有效的對象時調用它,那麼就應該使用靜態方法. PHP將不在靜態方法內部建立this變數,即使你從一個對象中調用它們.
例子6.7由6.3改變getCount為靜態方法而來. Static關鍵字不能阻止一個實例用->運算符來調用getCount,但PHP將不在方法內部建立this變數.如果你使用this->來調用,將會出錯.
//6.3例指第四節--構造函數和析構函數中的例子(參看前文),通過兩個例子的比較,你可以很好掌握
//static方法與普通方法之間的區別.
你可以寫一個方法通過判斷this是否建立來顯示是否它被靜態地或者非靜態地調用. 當然,如果你用了static 關鍵字,不管它怎樣被調用,這個方法總是靜態的.
你的類也可以定義常量屬性,不需要使用public static,只需要用const關鍵字即可. 常量屬性總是靜態的.它們是類的屬性,而不是實例化該類的對象的屬性.
Listing 6.7 Static members
復制代碼
代碼如下:
class Counter
{
private static $count = 0;
const VERSION = 2.0;
function __construct()
{
self::$count++;
}
function __destruct()
{
self::$count--;
}
static function getCount()
{
return self::$count;
}
};
//創建一個實例,則__construct()將執行
$c = new Counter();
//輸出 1
print(Counter::getCount() . "n");
//輸出類的版本屬性
print("Version used: " . Counter::VERSION . "n");
?>
⑹ 高分求解,PHP 怎麼用變數訪問靜態屬性
<?php
classTest
{
static$test='123456';
}
$str='test';
echoTest::$$str;
⑺ php面向對象 靜態屬性為什麼能用對象訪問
Static關鍵字
聲明類成員或方法為static,就可以不實例化類而直接訪問。不能通過一個對象來訪問其中的靜態成員(靜態方法除外)。
由於靜態方法不需要通過對象即可調用,所以偽變數$this在靜態方法中不可用。
靜態屬性不可以由對象通過->操作符來訪問。
用::方式調用一個非靜態方法會導致一個E_STRICT級別的錯誤。
就像其它所有的PHP靜態變數一樣,靜態屬性只能被初始化為一個字元值或一個常量,不能使用表達式。 所以你可以把靜態屬性初始化為整型或數組,但不能指向另一個變數或函數返回值,也不能指向一個對象。
--------以上為php手冊 原文