* 一、用途:
* 1.類中聲明靜態成員
* 2.函數中聲明靜態變量
* 3.后期靜態綁定
*
* 二、特點:
* 1.靜態成員屬于類,必須用類訪問
* 2.靜態方法比較特殊,允許用對象訪問,但不推薦
* 3.必須使用范圍解析符::訪問,不允許使用對象訪問符- 訪問
* 4.靜態屬性僅允許使用字面量(字符/數值/數組)或常量進行初始化(禁止表達式/變量/對象)
*
* 三、后期靜態綁定/延遲靜態綁定
* 注:php.net網址上有介紹非常的晦澀難懂,這里做一個簡化說明
* 1. 轉發調用是什么?
* 答:說人話,就是以回調的方式來執行靜態方法,用回調就必須指定調用者或代理函數。
* 調用者可以是self,parent,static
* 代理函數有很多:
* forward_static_call(callable,arg1...)
* forward_static_call_array(callable,array)
* call_user_func(callable,arg1...)
* call_user_func_array(callable,array)
class Demo1 public static function test1() //返回參數:func_get_args(void )返回參數數組 return implode( , , func_get_args()); //后期靜態綁定(最后再創建這個父類方法用來教學) public static function test3() //調用當前類的靜態方法// return self::test1( php , mysql , thinkphp //使用static,動態判斷是哪個類在調用test1()方法 //類方法的調用者,在聲明時指定,是前期調用,在編譯階段完成 //類方法的調用者,在執行時指定,是后期調用,在運行階段完成 return static::test1( php , mysql , thinkphp class Demo2 extends Demo1 //重寫父類靜態方法 public static function test1() return __METHOD__; public static function test2() //1.傳統調用父類靜態方法 return parent::test1( php //2.用代理函數調用父類靜態方法 //return forward_static_call([ Demo1 , test1 ], Hello , PHP //下call_user_func()功能完全一樣 //return call_user_func([ Demo1 , test1 ], Hello , PHP //調用本類的靜態方法 //return forward_static_call([ Demo2 , test1 //如果第一個參數是一個字符串,是指一個全局函數,不屬于任何類 //return forward_static_call( test3 , m.survivalescaperooms.com
* 2. Demo2類繼承自Demo1,所以可以用Demo2訪問test3() * 3. test3()中訪問了當前類的test1()方法,當然是Demo1類的test1() * 4. 但是我是用Demo2類調用的test3(),因此我的本意,肯定是想調用Demo2中重載的test1() * 5. 那么,如果能讓當前靜態方法的調用者,根據繼承關系的上下文自動進行判斷呢? * 6. 在靜態方法前使用static關鍵字,這樣就可以自動判斷是哪個類在調用我了~~ * 7. 運行時會自動將static,替換成Demo2類echo hr //思考:在Demo1中調用test3()會輸出什么結果?echo Demo1::test3();
* 1.會輸出Demo1類中的test1()方法的運行結果
* 2.因為當前調用者是Demo1,運行時會自動將static替換成Demo1
以上就是php中static的說明和用法的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答