① php中怎麼調用方法中的靜態變數
static
變數是php中的變數作用范圍的一個重要特性
靜態變數僅在局部函數域中存在且只被初始化一次,當程序執行離開此作用域時,其值不會消失,會使用上次執行的結果
一個普通的變數,如
$message
在它所在的函數執行完之後就被釋放了
即第二個function執行10次,每次執行完後,$message變數被釋放,所以每次都是1
變數前加了static後,該變數在它所在的函數執行完後不會被釋放
即第一個function每次被執行後,static
$message沒有被釋放,它將被繼續累加
② php靜態屬性跟常量有什麼區別啊
類的靜態屬性. 會在類文件載入的時候, 就初始化.
屬性值是可以更改的.
常量...一旦定義了. 就無法變更值..
這應該算是最大區別.
另外, 常量只能是簡單的數據類型(如: int , string , boolean,float , double) ,
類的靜態屬性, 可以是php所支持的任意變數類型(但初始化的時候. 只能是簡單數據類型, 數組)
③ php中靜態成員如何使用
當前類中使用self::或者static::調用靜態成員,靜態方法中只能調用靜態成員,外部直接使用類名::靜態成員調用
④ php 靜態方法為什麼不能調用this
static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「類方法」。
2. 靜態變數的調用方法:只能使用slef:: 或者 類名:: 訪問,不能使用$this訪問;反之,類的成員變數未聲明為const及static時,只能使用$this訪問,不能用::訪問。
⑤ php 中設置靜態屬性的意義是什麼
靜態和公共、受保護、私有這3種屬性格式沒有關系, 他們並不是並列的
公共、受保護、私有同樣可以設置為靜態
如:
publicstatic$a;
privatestatic$b;
靜態屬性的基本作用, 就是與普通的屬性不同的是, 靜態屬性會記住之前的值, 舉例說明:
functiona(){
$a=1;
$a+=1;
echo$a;
}
//然後連續3次調用這個函數測試下
a();
a();
a();
上面代碼會輸出 2 2 2
改成靜態屬性:
functiona(){
static$a=1;
$a+=1;
echo$a;
}
//然後連續3次調用這個函數測試下
a();
a();
a();
以上會輸出 2 3 4
具體什麼情況下會用到, 看程序開發的具體需求!
⑥ php父類如何調用子類的靜態方法或變數
<?php
classA{
staticpublic$m=1;
staticpublicfunctionm(){
echostatic::$m,'<br/>';
}
staticpublicfunctionn(){
static::n();
}
}
classBextendsA{
staticpublic$m=111;
staticpublicfunctionm(){
parent::m();
}
staticpublicfunctionn(){
echoparent::$m,'<br/>';
}
}
B::m();
B::n();
⑦ php中,靜態方法下,沒什麼不能用this調用動態屬性
因為 靜態的的方法和 類的屬性不是存在一個內存空間.
類需要實例出一個對象才能使用它的屬性.而類的靜態方法就不要實例就能使用.所以他們存在內存的空間是不一樣的.
⑧ PHP中,怎麼在成員函數當中調用自己的成員屬性除了靜態調用之外還有別的方法嗎
和靜態數據成員一樣,靜態成員函數是類的一部分,而不是對象的一部分。如果要在類外調用公用的靜態成員函數,要用類名和域運算符「∷」。
如 Box∷volume( ); 實際上也允許通過對象名調用靜態成員函數,如 a.volume( ); 但這並不意味著此函數是屬於對象a的,而只是用a的類型而已。 靜態成員函數的作用是為了能處理靜態數據成員。 可以說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有this指針,靜態成員函數並不屬於某一對象,它與任何對象都無關,靜態成員函數沒有this指針。
由此決定了靜態成員函數不能訪問本類中的非靜態成員。 在C++程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。假如在一個靜態成員函數中有以下語句: cout<<height<<endl; //若height已聲明為static,則引用本類中的靜態成員,合法 cout<<width<<endl; //若width是非靜態數據成員,不合法。但是,並不是絕對不能引用本類中的非靜態成員,只是不能進行默認訪問,因為無法知道應該去找哪個對象。如果一定要引用本類的非靜態成員,應該加對象名和成員運算符「.」。如 cout<<a.width<<endl; //引用本類對象a中的非靜態成員