phpstatic類
A. 關於php當中static關鍵字,資料上說只能初始化一次。但是數組變數在定義時賦值會被下一次初始化覆蓋!
你定義了static 就是靜態變數
但是靜態變數的初始化只進行一次,而且是定義靜態變數的時候初始化
static $a = array(1,2,3);
print_r($a);
static $a = array();
這樣實際上是定義了兩次靜態變數,並初始化,實際做會執行其中一個
就是後面這個
上面的代碼實際上會被編譯器編程這樣
<?php
function f1(){
static $a = array();
print_r($a);
print_r($a);
}
function f2(){
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
B. PHP類的靜態(static)方法和靜態(static)變數使用介紹
在php中,訪問類的方法/變數有兩種方法:
1.
創建對象$object
=
new
Class(),然後使用」->」調用:$object->attribute/function,前提是該變數/方法可訪問。
2.
直接調用類方法/變數:class::attribute/function,無論是靜態/非靜態都可以。但是有前提條件:
A.
如果是變數,需要該變數可訪問。
B.
如果是方法,除了該方法可訪問外,還需要滿足:
b1)
如果是靜態方法,沒有特殊條件;
b2)
如果是非靜態方法,需要改方法中沒有使用$this,即沒有調用非靜態的變數/方法,當然,調用靜態的變數/方法沒有問題。
然後我們再看一下使用$object->…
和使用class::…
都有什麼區別:
1.
使用$object->…
,需要執行構造函數創建對象;
2.
使用class::…
調用靜態方法/變數,不需要執行構造函數創建對象;
3.
使用class::…
調用非靜態方法/變數,也不需要執行構造函數創建對象。
然後奇怪的地方就出來了,既然2和3都一樣,那靜態方法/變數存在還有什麼意義呢?
差異還是顯然存在的,如下:
1.
靜態變數
靜態成員只保留一個變數值,而這個變數值對所有的實例都是有效,也就是說,所有的實例共享這個成員。
2.
靜態方法
靜態方法可以直接使用class::…
來調用,而非靜態方法需要滿足一定限制條件才能使用class::..
的方法調用,如之前所述
C. php 類中的static有什麼作用
new關鍵字是用於實例化一個類
語法為
$class
=
new
classname();
static關鍵字是用於定義類中靜態的屬性或方法,靜態屬性或方法可以不需要實例化就可以直接使用,例如:
?php
class
test
{
static
function
show(){
echo
'hello
world';
}
}
//可以直接使用,不需要實例化
test::show();
//輸出hello
world
?
D. php static 方法有什麼好處
靜態方法不需要所在類被實例化就可以直接使用。
靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
E. php 中static public 與public static有區別嗎
static public與public static是等價的,這兩者只是兩個修飾符的順序不同。
根據oracle.com教材中第八章的描述,如果兩個或兩個以上的(不同的)欄位修飾符出現在欄位聲明,它們出現的順序需與FieldModifier一致,這只是習慣,但不是必需的。
部分修飾符說明:
public是訪問許可權修飾符,用於控制外界對類內部成員的訪問,聲明為public的對象成員是完全共有的,外界可以隨意訪問,除此之外還有private,protected和默認。
static控制類成員變化的修飾符。static是靜態成員修飾符,其修飾的靜態變數脫離具體對象獨立存在,在內存中之後一份拷貝,所有的對象都公用這一個存儲空間,所以對static修飾的靜態變數進行的修改對該類的所有對象都起作用。static修飾的靜態函數代表所有對象的統一操作,只能調用靜態變數。static是針對面向對象中的「多態」而提出來的,static修飾的靜態成員不存在多態性。
附:FieldModifier順序
F. 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;
}
?>
G. php static 是什麼意思
static是PHP內置關鍵詞;意為靜態的意思;該關鍵詞可以修飾類中變數或者方法;示例如下:
<?php
classBai{
publicstatic$name="";
publicstaticfunctionask(){
echo"hello,welcometo!".self::$name;
}
}
//測試
Bai::ask();
//hello,welcometo!
H. PHP中的靜態類是怎麼實現的啊
首先:類不可以標注static,也就是說沒有「靜態類「!
所謂"靜態類"指的是:類中含有靜態的成員、方法是用static標注的。寫法例如:
<?php
classMath
{
publicstaticfunctionceil($value)
{
returnceil($value);
}
publicstaticfunctionfloor($value)
{
returnfloor($value);
}
}
?>
另外類種的靜態方法無需實例化成對象即可使用哦,實例化會報錯哦;