1. php中 不能用 new 給 static變數賦值嗎
<?php
finalclassCLLog{//final關鍵字防止類被繼承
privatestatic$ins=null;
privatestatic$LOGNAME=null;
private$num=null;//測試用
privatefunction__construct(){//protected關鍵字防止類從外部被實例化
//你的代碼
$this->num=mt_rand(10000,99999);//測試,看你每次獲得的對象是不是同一個對象
}
privatefunction__clone(){//如果有人要克隆你的類,就returnfalse
returnfalse;
}
publicstaticfunctiongetIns($LOGNAME){//能過公開的getIns從內部獲得一個對象
self::$LOGNAME=$LOGNAME;
if(self::$ins==null){//如果對象不存在,就創建一個對象,並返回
self::$ins=newself();
returnself::$ins;
}else{//如果對象已經存在,就直接返回這個對象
returnself::$ins;
}
}
}
//以下為測試用(如果,得到的隨機數都是同一個數字,就說明以下的對象都為同一個對象了)
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
?>
2. php 中static public 與public static有區別嗎
static public與public static是等價的,這兩者只是兩個修飾符的順序不同。
根據oracle.com教材中第八章的描述,如果兩個或兩個以上的(不同的)欄位修飾符出現在欄位聲明,它們出現的順序需與FieldModifier一致,這只是習慣,但不是必需的。
部分修飾符說明:
public是訪問許可權修飾符,用於控制外界對類內部成員的訪問,聲明為public的對象成員是完全共有的,外界可以隨意訪問,除此之外還有private,protected和默認。
static控制類成員變化的修飾符。static是靜態成員修飾符,其修飾的靜態變數脫離具體對象獨立存在,在內存中之後一份拷貝,所有的對象都公用這一個存儲空間,所以對static修飾的靜態變數進行的修改對該類的所有對象都起作用。static修飾的靜態函數代表所有對象的統一操作,只能調用靜態變數。static是針對面向對象中的「多態」而提出來的,static修飾的靜態成員不存在多態性。
附:FieldModifier順序
3. 關於 php 類 關鍵字 public static 連用的問題
static是靜態成員的聲明關鍵字,跟public不沖突
static控製成員的存在周期,public控製成員的訪問許可權
public static聲明這個變數為public就是可以公共訪問的,且是靜態變數
class test{
public static $name="myname";
}
$testOne = new test();
echo test::$name;//輸出myname
但是如果將以上是public,改成private,將提示錯誤
4. 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.常量一定要在聲明的時候就給初始值
5. PHP請問在static的function中如何訪問變數
靜態方法只能訪問其他的靜態方法或屬性,比如
classA{
privatestatic$url;
($url){
self::$url=$url;
}
(){
returnself::$url;
}
}
//或者在你的靜態方法中獲得實例,當然這樣的話可能達不到你預期的效果,推薦你還是使用上面的方法。
classA{
private$url='demo';
publicstaticfunctiongetUrl(){
$obj=newself();
return$obj->url;
}
}
6. php static可以是保護許可權嗎
PHP中有三種訪問修飾符,分別是:
public(公共的、默認)
protected(受保護的)
private(私有的)
public(公共的、默認)在PHP5中如果類沒有指定成員的訪問修飾符,默認就是public的訪問許可權。
protected(受保護的)被聲明為protected的成員,只允許該類的子類進行訪問。
private(私有的 ) 被定義為private的成員,對於類內部所有成員都可見,沒有訪問限制。對類外部不允許訪問。
圖解
demo
復制代碼 代碼如下:
class Woman{
public $name = "gaojin";
protected $age = "22";
private $height = "170";
function info(){
echo $this->name;
}
private function say(){
echo "這是私有的方法";
}
}
//$w = new Woman();
//echo $w->info();
//echo $w->name;//公共屬性可以訪問
//echo $w->age;// 受保護屬性,報致命錯誤
//echo $w->height;// 受保護屬性,報致命錯誤
//私有方法,訪問出錯
//$w->say(); // 私有方法,訪問出錯
class Girl extends Woman{
// 可以重新定義父類的public和protected方法,但不能定義private的
//protected $name = "jingao"; // 可以從新定義
function info(){
echo $this->name;
echo $this->age;
echo $this->height;
}
function say(){
//parent::say();//私有方法 不能被繼承 如果父類的的say方法是protected 這里就不會報錯
echo "我是女孩";
}
}
$g = new Girl();
$g->say();//正常輸出
//echo $g->height;//私有屬性訪問不到 沒輸出結果
//$g->info();//這是輸出 gaojin22 $height是私有的屬性沒有被繼承
//$g->height ="12";//這里是重新定義 height屬性 也賦值了
//$g->info();//所以這里會輸出來gaojin2212
7. 什麼時候該使用PHP的static屬性和方法
靜態方法就是隸屬於一個類的函數,為什麼希望讓這個函數隸屬於類,一般有兩種情況:1、函數的名字太常規,以至於可能與其它獨立函數產生命名沖突,則你把它作為類的靜態方法,可以變相起到封入命名空間的效果。比如你想為某個類定義一個特別版的setcookie();2、當一個函數希望訪問某個類的私有成員變數時(private 或 protected),顯然在通常情況下,它作為外部獨立函數是訪問不到的。把它定義為那個類的靜態方法,就可以作為類的成員函數輕松訪問那些私有成員變數了。另外對 6 樓做一個補充:靜態成員方法也有訪問級別,如果定義為了 private 或 protected,則外部是無法作為普通函數直接調用的。
8. php static 方法有什麼好處
靜態方法不需要所在類被實例化就可以直接使用。
靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
9. php 中使用private static 方法名 是什麼意思
private 關鍵字聲名 一個私有的方法或屬性;定義了private的方法或屬性在類的外部不能訪問,只能在本類中使用。
類中使用私有方法:
$this->屬性 或 方法()
static 關鍵字 是創建一個靜態方法或靜態屬性;定義了static 的方法或屬性不需要實例化就可以使用。
訪問靜態變數 類名::$變數名;
訪問靜態方法 類名::方法名();
訪問本類靜態變數 self::$變數名;
訪問本類靜態方法 self::方法名();
訪問父類靜態變數 parent::$變數名;
訪問父類靜態方法 parent::方法名();
10. php中聲明變數var與private、public、static的區別
var
是聲明一個變數/對象,public,
private,
是類/類的屬性/類的欄位的訪問修飾符,static是類/類的屬性/類的欄位的修飾符