1. 程式人生 > >PHP的self::與static::,new self()和new static()之分

PHP的self::與static::,new self()和new static()之分

//後期靜態繫結
class A {
   public static function who() {
      var_dump("I'm A");
   }
   public static function test() {
      self::who();
   }
   public static function staticT() {
      static::who();
   }
   public function who1() {
      var_dump("I'm A who1");
   }
   public static function staticT1
() { // static::who1(); //who1不是static方法, 錯誤 (new static())->who1(); //用new static()建立新的靜態域物件(具體是哪個類物件,則根據執行的類計算,跟static定義所在類無關),用->呼叫非靜態方法 (new self())->who1(); //永遠是A的who1()方法, self::只跟其定義所在類相關 } } class B extends A { public static function who() { var_dump("I'm B"); } public function
who1() { var_dump("I'm B1 who1"); } } class B1 extends A { public static function who() { var_dump("I'm B1"); } public static function test() { self::who(); } } B::test(); //I'm A, 因為self::在A中,所以只會呼叫A的who()方法 B1::test(); //I'm B1, 因為B1\A都有self::, 但B1過載了A中的test()方法, 所以B1中的self::只會呼叫B1的方法
B::staticT(); //I'm B,因為static::是一個全域性的靜態域, 不侷限於其定義所在的類,因此B過載了A的who()靜態方法, static::會呼叫B的who() B1::staticT(); //I'm B1,與上同理 B::staticT1(); //I'm B1 who1, I'm A who1, 解釋看程式碼 die;

相關推薦

PHP的self::static::new self()new static()

//後期靜態繫結 class A { public static function who() { var_dump("I'm A"); } public static function test() { self::who();

php -- new self() new static

如果 color fun span pre clas stat 類繼承 extends 看一段摘自網上的代碼 class A { public static function get_self() { return new self(); } pu

PHP new self()new static()的區別

phpnew static()是php5.3以後引入新的特性,延遲靜態綁定.訪問的是當前實例化的那個類,那麽 static 代表的就是那個類。new self() 是指的不是調用上下文,它指的是解析上下文.class Test { public static funtion getSelf(){

new self() new static() 的區別

1、new static()是在php5.3版本引入的新特性 2、無論是 new static 還是 new self() 都是 new 一個物件 3、這兩個方法new 出來的物件 有什麼區別呢?說白了就是new出來的到底是同一個類的實列還是不同類的實列 為了探究上面的問

PHP中new self()new static()的區別--延遲靜態載入

1.new static()是在PHP5.3版本中引入的新特性。 2.無論是new static()還是new self(),都是new了一個新的物件。 3.這兩個方法new出來的物件有什麼區別呢,說白了就是new出來的到底是同一個類例項還是不同的類例項呢? 為了探究上面的問題,我們

【PHP趣味】new selfnew static的區別

<?php class Test { private $_user; protected function __construct($user) { $this->_user = $user; } public

java基礎———類物件成員變數區域性變數封裝及關鍵字staticthis

類與物件,成員變數和區域性變數,封裝及關鍵字static和this 面向物件的思想 類與物件及其應用 物件的記憶體圖 成員變數和區域性變數的區別 匿名物件 封裝(private) this關鍵字 構造方法 物件的建立步驟

MySQL第四天(用戶授權撤銷完全備份完全恢復)

運維day04一、用戶授權與撤銷數據庫管理員密碼設置?1.1修改數據庫管理員本機登錄密碼[root@db2 ~]# mysqladmin -hlocalhost -uroot -p password "123456"Enter password: mysqladmin: [Warning]

python中的__new____init__新式類經典類(2.x)

類型 pytho 圖片 pla object pri lba 版本 其它 在python2.x中,從object繼承得來的類稱為新式類(如class A(object))不從object繼承得來的類稱為經典類(如class A()) 新式類跟經典類的差別主要是以下幾點: 

微控制器引腳引腳GPIO的區別

一,引腳與埠: 1.引腳就是晶片外接的引腳啊,一個晶片至少有VCC,GND引腳,象51微控制器還有IO引腳,串列埠引腳等,引腳就是物理外接的一個個管腿啊。2.埠是微控制器內部(CPU單元)和外部IO的介面組,比如說PA埠,有8個引腳,PA0~PA7。埠在IO空間對映有暫存器,這個暫存器反映當前埠

淺談 C++ 中的 new/delete new[]/delete[]

在 C++ 中,你也許經常使用 new 和 delete 來動態申請和釋放記憶體,但你可曾想過以下問題呢? new 和 delete 是函式嗎? new [] 和 delete [] 又是什麼?什麼時候用它們? 你知道 operator new 和 operator delete 嗎? 為什麼

c++學習new int()new int[]的區別

new int[] 是建立一個int型陣列,陣列大小是在[]中指定,例如: int * p = new int[3]; //申請一個動態整型陣列,陣列的長度為[]中的值 new int()是建立一個

關於C++中new/deletenew[]/delete[]

參看連結 淺談 C++ 中的 new/delete 和 new[]/delete[] operator new 和 operator delete 這兩個其實是 C++ 語言標準庫的庫函式,原型分別如下: void *operator new(size_t); //al

C++中的new/deletenew[]/delete[]

1、瞭解new-handler的行為 通俗來講就是new失敗的時候呼叫的回撥函式,直接看程式碼: #include<iostream> #include<string.h> #include <stdlib.h> using nam

new/delete new[]/delete[] 配套使用

new 和 delete 到底是什麼? 如果找工作的同學看一些面試的書,我相信都會遇到這樣的題:sizeof 不是函式,然後舉出一堆的理由來證明 sizeof 不是函式。在這裡,和 sizeof 類似,new 和 delete 也不是函式,它們都是 C++ 定義的關鍵字

Java中"throw new Exception() ""new Exception()"的區別

throw new Exception(String, Exception) throw new Exception(String) throw是明確地丟擲異常 ////throws的作用/////////////////////////////////// 宣告方法可能

new/delete new[]/delete[]的解讀(轉)

 new 和 delete 到底是什麼? 如果找工作的同學看一些面試的書,我相信都會遇到這樣的題:sizeof 不是函式,然後舉出一堆的理由來證明 sizeof 不是函式。在這裡,和 sizeof 類似,new 和 delete 也不是函式,它們都是 C++ 定義

獲取數字證書相關資訊證書有效性驗證RSA加密解密功能獲取證書相關資訊

//公鑰 private PublicKey pk; /** 後臺將證書以byte陣列的形式傳入 * @param bytes,數字證書crt傳入的byte陣列 * @return */ public InfoEntity getCertificateInfo(

獲取數字證書相關資訊證書鏈有效性驗證RSA加密解密功能證書鏈有效性驗證

/** * 證書有效性驗證,後臺將證書鏈以byte[]陣列集合的形式傳入 * @param certChain 後臺傳入的證書鏈 * @param cert2Verify 本地需要驗證的證書 * @return */ public int

Java中static修飾的方法static修飾的方法的區別

在Java中有一個static修飾符,可以用來修飾方法和變數 我們都知道static修飾的方法時靜態方法,那麼靜態方法和普通方法有什麼區別? 簡單點說static修飾的方法可以直接用類名呼叫,也可以例項化物件呼叫: class A{ public static void