Ⅰ 說說php面向對象編程時static,public,private,protected 各有什麼意義
staticpublic與publicstatic是等價的,這兩者只是兩個修飾符的順序不同。根據oracle.com教材中第八章的描述,如果兩個或兩個以上的(不同的)欄位修飾符出現在欄位聲明,它們出現的順序需與FieldModifier一致,這只是習慣,但不是必需的。部分修飾符說明:public是訪問許可權修飾符,用於控制外界對類內部成員的訪問,聲明為public的對象成員是完全共有的,外界可以隨意訪問,除此之外還有private,protected和默認。static控制類成員變化的修飾符。static是靜態成員修飾符,其修飾的靜態變數脫離具體對象獨立存在,在內存中之後一份拷貝,所有的對象都公用這一個存儲空間,所以對static修飾的靜態變數進行的修改對該類的所有對象都起作用。static修飾的靜態函數代表所有對象的統一操作,只能調用靜態變數。static是針對面向對象中的「多態」而提出來的,static修飾的靜態成員不存在多態性。附:FieldModifier順序
Ⅱ 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中靜態方法(s
靜態方法佔內存少,不用實例化,可直接調用
Ⅳ php怎麼理解這些個關鍵字啊,public;private;protect;final;static;const;我感覺這
public: 公有屬性或方法
在子類中可以通過self::var 或self::method 來調用,可以通過parent::method來調用父類中的方法,但不能調用公有屬性.
在實例中可以通過$obj->var或self::method 來調用
protected: 受保護類型
在子類中可以通過self::var 或self::method調用,可以通過parent::method來調用父類中的方法
在實例中不能通過$obj->var 來調用 protected類型的方法或屬性
private: 私有類型
該類型的屬性或方法只能在該類中使用,在該類的實例、子類中、子類的實例中都不能調用私有類型的屬性和方法
再來說說final
1.final不能用來修飾成員屬性
2.final只能修飾類和方法
作用:被修飾的類不能被子類所繼承;被修飾的方法不能被子類的方法覆蓋。
然後來說說static
1.static用來修飾成員屬性和成員方法,但不能用來修飾類
2.用static修飾的成員屬性可以被同一個類的所有對象共享
3.靜態的數據是存在 內存中的 數據段中(初始化靜態段)
4.靜態的數據是在類在第一次載入時,分配到內存中的
5.什麼是類被載入?只要在程序中使用到這個類(有這個類名出現)
6.靜態的成員屬性都要用類名去訪問,不用創建對象,不用對象去訪問;在類里邊可以用self代表本類($this)
7.靜態方法,不能訪問非靜態的成員屬性(但是,在非靜態方法卻能訪問靜態的成員屬性),非靜態的成員屬性,必須用對象訪問,在內部訪問非靜態成員屬性,用$this.
8.如果你確定一個方法中不需使用到非靜態的成員屬性,則可以將這個方法聲明為靜態方法,不需實例化對象,就可以訪問
最後來說說const
1.它只能用來修飾成員屬性
2.在類中聲明常量必須使用const
3.訪問方式和訪問靜態成員屬性一樣(類外使用 類名::成員屬性,類里邊則使用self::成員屬性)
4.常量一定要在聲明的時候就給初始值
Ⅳ 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::..
的方法調用,如之前所述
Ⅵ php static 方法有什麼好處
靜態方法不需要所在類被實例化就可以直接使用。
靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
Ⅶ php的靜態變數究竟有什麼作用
一、靜態變數具有這樣的特性:
當在某函數里定義一個靜態變數後,這個變數不會即使函數退出了,在下次調用這個函數時,它會使用前次被調用後留下的值。
此外,雖然該變數不隨函數的退出而繼續存在,但函數的外部並不能使用它。
因此,靜態變數的應用時機如下:
當多次調用一個函數,且要求在調用之間保留某些變數的值時,可考慮採用靜態局部變數。
雖然用全局變數也可以達到上述目的,但全局變數有時會造成意外的副作用,因此仍以採用局部靜態變數為宜。
以下是某應用中的示例代碼:
<?PHP
functionTest()
{
static$count=0;
$count++;
echo$count;
if($count<10){
Test();
}
$count--;
}
?>
二、對於類中定義的靜態變數來說,簡單點說,類的靜態成員可以不用實例化而直接使用。
Ⅷ php中static 靜態變數和普通變數的區別
php中static 靜態變數和普通變數的區別:
在變數的前面加上static 就構成了靜態變數(static 變數)。
static變數和普通變數的區別在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。 而靜態全局變數則限制了其作用域, 即只在定義該變數的源文件內有效, 在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。
Ⅸ PHP 中的 new static 有何作用,如何理解
new關鍵字是用於實例化一個類
語法為 $class = new ClassName();
static關鍵字是用於定義類茄逗中靜態的屬性或方法,靜態屬性或方法可以不需要實例化就顫帶賣可以直接使用,行顫例如:
<?php
class test
{
static function show(){
echo 'hello world';
}
}
//可以直接使用,不需要實例化
test::show();
//輸出hello world
?>