1. 程式人生 > >php中對象

php中對象

就是 this 指向 lis 對象賦值 標量 turn color 克隆對象

clone 和   __clone】
     1、對象是引用數據類型: 
             當使用   = 將一個對象賦值給另一個對象時, 賦的是對象的地址, 兩個變量指向同一地址, 一個跟著另一個也跟著變
        $lisi = $zhangsan;
      
     2、clone: 
            如果想要將一個對象完全克隆出一個互不幹擾的對象, 需要使用clone關鍵字
        $lisi = clone $zhangsan;
      
     3、__clone(): 
       ① 當使用clone關鍵字克隆對象時, 將自動調用魔術方法
       ② __clone()函數
, 相當於克隆對象時的構造函數, 用於給新克隆對象賦初值 ③ 在clone()函數中, $this 指向的是新克隆出的對象 【__toString()】 當使用 echo 等輸出語句時, 直接打印對象時, 將調用__toString()方法, 打印方法返回的 字符串內容 function __toString(){ return "[name:{$this->name},age:{$this->age}]";//數組格式 [name:zhangsan,age:14] //return "{name:{$this->name},age:{$this->age}}";//對象格式 {name:zhangsan,age:14}
} echo $zhangsan;//echo 只能打印字符串 【__call()】 調用類中未公開或者未定義的方法時, 將自動執行__call() 方法 自動調用時, 將給 __call()方法傳遞兩個參數: ① 調用的方法名 ②調用方法時傳遞的參數, 數組格式 【__autoload()】 ① 這是唯一一個不需要在類中調用的模式方法 ② 當實例化一個不存在的類時, 將自動調用這個魔術方法 ③ 調用方法時, 將自動給__autoload()傳遞一個參數, 表示實例化的類名 所以
, 可以根據類名, 自動導入對應的類文件(類名命名必須規範) function __autoload($class){ include "class/".strtolower($class).".class.php"; } $zhangsan = new Person();//本文件中沒有Person類, 將自動執行__autoload() 並加載"class/person.class.php" 【對象的串行化與反串行化(序列化與反序列化)】 1、 串行化: 將對象通過一系列操作, 轉化為一個字符串 2、反串行化: 將串行化以後的字符串, 重新轉化為對象 3、什麽時候使用串行化: ① 當對象需要在網絡中傳輸的時候 ② 當對象需要持久化保存在文件或數據庫中的時候 4、如何進行對象的串行化與反串行化 ① 串行化: $str = serialize($zhangsan); ② 反串行化: $obj = unserialize($str); 5、__sleep()魔術方法: ① 當執行對象串行化時, 會自動執行__sleep()方法 ② __sleep()方法要求返回一個數組, 數組中的值就是可以串行化的屬性, 不在數組中的值, 將不能串行化 function __sleep(){ return ["name"]; // 只有name屬性, 可以進行串行化 } 6、__wakeup()魔術方法: ① 當執行對象反串行化時, 自動執行 ② 自動調用時, 用於給反串行化新產生的對象賦默認值 function __wakeup(){ $this->name = "lisi"; //$this 指向反串行化新產生的對象 } 【json_encode 和 json_decode 對數組和對象進行串行化】 1、json_encode: 將對象和數組, 串行化為一個JSON字符串 $str = json_encode($arr); 2、json_decode: 將JSON字符串, 反串行化為對象或數組 第一個參數: 為JSON字符串 第二個參數: 為true 或 false, true表示轉為數組, false 表示轉為對象(默認) $obj = json_decode($str); $arr = json_decode($str,true); 【類型約束】 1、類型約束: 在變量前加上數據類型, 用於約束變量只能存放對應數據類型的值(這種操作子強類型語言中非常常見, 在PHP中, 只能實現數組和對象(屬於符合類型)的約束, 不能約束標量和特殊類型) 2、在PHP 中, 類型約束, 只能發生在函數的形參中, 聲明普通的變量, 不能進行類型約束 function func(array $arr){} √ array $arr = []; × 3、如果類型約束為一個類, 則本類或者子類的所有對象, 都可通過約束 class Person{} class Student extends Person{} function func(Person $num){} func(new Person()); √ func(new Student()); √ func("1111"); × 【魔術方法小總結】 1、__construct(): 構造函數, new一個對象時, 自動調用, 用於給對象賦初值 2、__destruct() : 析構函數, 當 一個對象被銷毀時, 自動調用 3、__set(): 當 給對象的非公開屬性賦值時, 自動調用; 參數: 屬性名, 屬性值 4、__get(): 當讀取對象的非公開屬性賦值時, 自動調用; 參數: 屬性名; 返回值: $this->屬性名; 5、__isset(): 當使用__isset()檢測對象私有屬性時, 自動調用; 參數: 屬性名; 返回值: isset($this->屬性名); 6、__unset(): 當使用__unset()刪除對象私有屬性時, 自動調用; 參數: 屬性名; 在方法中執行unset($this->屬性名); 7、__clone(): 當使用clone關鍵字克隆對象時, 自動調用; 用於給新客隆對象賦初值 8、__toString(): 當使用echo語句打印對象時, 自動調用; 返回值: 需要打印的內容 9、__call(): 當執行對象中非公開的方法時, 自動調用; 參數: 調用的方法名, 數組格式的參數列表, 返回值隨意 10、__autoload(): 唯一一個在類外使用的魔術方法, 當實例化一個沒有生命的類時自動調用。 參數: 實例化的類名 作用: 在函數中include對應的類文件 11、__sleep(): 當對象序列化時自動調用, 返回值: 數組格式, 表示能夠序列化的屬性名 12、__wakeup(): 當對象反序列化時自動調用, 作用: 給新產生的對象賦初值

php中對象