標籤:
課時165 對象序列化(序列化)2 * __sleep()在序列化時自動調用的方法
* 作用:可以設定需要序列化的對象的屬性
* 只要在這個方法中,返回一個數組,在數組中聲明了那個屬性名稱,那個屬性就會被序列化,沒有在數組中的屬性就不被序列化.
* 預設不加數組,全部屬性都序列化.
*
* __wakeup()---在返序列化時自動調用的方法
* 作用:
* __construct()對對象進行初始化
* __clone()對複製對象進行初始化
* __wakeup()對序列化回來後的對象進行初始化 function __sleep(){
echo "開始串列:";
return array("name");}
function __wakeup(){
echo "返序列化開始:";
$this->name = "sce";
}
課時166 PHP數組的序列化(JSON格式)
<?php
/*
* 數組序列化 json ---- javascript object
* 處理json_encode() 不支援中文的情況
* 實際應用中,當有中文字元時,當直接使用json_encode() 函數會使漢字不能正常顯示
*
*/$arr = array("name"=>"zhangsan","age"=>10,"sex"=>"man");
//序列化
$str = json_encode($arr);
//返序列化,第二個參數true返序列化為數組
$prr = json_decode($str,true);
echo $prr[‘name‘];
?>
結果:
zhangsan
課時167 魔術方法__set_state()
<?php
/*
* 1.eval()函數 --- 檢查並執行php代碼
* 2.var_export()可以列印各個類型的資訊,但會將類似轉成合法的php代碼
*
* __set_state()方法,就在在使用var_export()方法時,到處一個類的資訊時自動調用的方法
*
*/
class Person{
public $name;
public $age;
public $sex;function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
function say(){
}
static function __set_state($arr){ //方法必須是靜態.
$p = new person("lisi",43,"woman");
$p->name = $arr[‘name‘];
$p->age = $arr[‘age‘];
return $p;
}
}
$b = new person("zhangsan",20,"man");
$b ->name = "liiii";
$b ->age = 234;
eval(‘$c =‘.var_export($b,true).";");
var_dump($c);
?>
結果:
object(Person)[2] public ‘name‘ =>
string
‘liiii‘ (length=5) public ‘age‘ =>
int
234 public ‘sex‘ =>
string
‘woman‘ (length=5)
課時168 PHP 5.3以後新增的魔術方法
__invoke()
在對象執行個體之後,直接像變數函數一樣直接調用這個對象,引用後加上()自動調用這個方法.
__callstatic()
跟__call()一樣,但是它是用來處理靜態方法的.而且自身也必須是靜態.
課時169 自動載入類__autoload()
__autoload()
只要在這個指令碼中,需要載入類的時候,就會自動調用這個方法.
<?php
// 一個檔案放一個類, 檔案名稱就是類名. 再加次層網域class.
function __autoload($classname){
include strtolower($classname)."class.php";
}
?>
課時170 PHP抽象方法和抽象類別1
* 1.什麼是抽象方法? * 定義:一個方法如果沒有方法體(一個方法,不使用"{}",直接使用分號結束的方法,才是沒有方法體的方法),則這個方法就是抽象方法 * * 一.聲明一個方法,不實用{},而直接以分號結束 * 二.如果是抽象方法,必須使用abstract(抽象關鍵字來修飾) * 2.什麼是抽象類別? * 一.如果一個類中有一個方法是抽象的方法,則這個類就是抽象類別 * 二.如果聲明一個抽象類別,則這個類必須要使用abstract來修飾 * * 注意: * 1.只要使用 abstract 修飾的類,就是抽象類別 * 2.抽象類別是一種特殊的類,特殊在抽象類別中可以有抽象方法 * 3.除了在抽象類別中可以有抽象方法以外,和正常的類完全一樣 abstract class person { //抽象類別 //抽象方法 abstract function say(); }課時171 PHP抽象方法和抽象類別2* 注意2:
* 1.抽象類別不能執行個體化對象(不能建立出對象)
* 2.如果看見抽象類別,就必須寫這個類的子類,將抽象類別中的抽象方法覆蓋(加上方法體).
* 3.子類必須全部實現(覆蓋重寫)抽象方法,這個子類才能建立對象,如果只實現部分,那麼還有抽象方法,那麼子類也必須是抽象類別
*
* 抽象方法作用: 抽象方法就是一個規定了子類必須有這個方法.子類必須有這個方法的實現,功能交給子類
* 唯寫出結構,而沒有實現,實現交給具體的子類去實現
*
*
* 抽象類別的作用:就是要求子類的結構,所以抽象類別就是一個規範 abstract class person { //抽象類別
//抽象方法
abstract function say();
}
class student extends person {
function say(){
echo "子類實現功能";
}
}
$s = new student();
$s -> say();
結果:子類實現功能課時172 PHP物件導向介面技術<?php
/*
* 抽象類別是一種特殊的類,介面是一種特殊的抽象類別,所以介面也是一種特殊的類
* 1.抽象類別和介面都有抽象方法
* 2.抽象類別和介面都不能建立執行個體對象
* 3.抽象類別和介面的使用意義也是作為一種規範
*
* 介面和抽象類別相比,特殊在:
* 1.介面中的方法,必須全要是抽象方法
* 所以在介面中的抽象方法不需要使用abstract,直接使用分號結束即可
* 2.介面中的成員屬性,必須是常量(不能有變數)
* 3.所有的許可權必須是公有的(public)
* 4.聲明介面不使用class,而是使用interface
*
*
*
*
*/
class Demo {
}
abstract class Demo2 {
}
interface Demo3 {
const NAME = "sss";
function test();
}
echo Demo3::NAME;
?>
結果:sss
課時173 PHP介面應用的一些細節
* 介面應用的一些細節:
* 1.可以使用extends讓一個介面繼承另一個介面 (介面和介面的關係---只有擴充新的抽象方法,沒有覆蓋關係)
* 2.可以使用一個類來實現介面中的全部方法,也可以使用一個抽象類別,實現介面中的部分方法 (類與介面,抽象類別與介面---存在覆蓋關係)
* 3.類與介面,抽象類別與介面就不用使用extends這個關鍵字,使用implements(實現). implements相當於extends
* extends 繼承(擴充),在這個PHP中,一個類只能有一個父類
* 4.一個類可以在繼承另一個類的同時,可以使用implements實現一個介面或者多個介面 (一定要先繼承再實現,順序不能變)
* 5.實現多個介面,只需要使用逗號分開多個介面即可 interface Demo3 {
const NAME = "sss";
function test();
}
interface Test extends Demo3 {
function test2();
}
class hello implements Demo3 {
function test(){
}
}
echo Demo3::NAME;
課時174 PHP面象對象的特性多態
課時175 PHP多態的應用執行個體
<?php
/*
* 多態特性:
* 1.程式擴充準備
* 技術:
* 1.必須有繼承關係,父類最好是介面或抽象類別
*/
interface USB { //建立介面USB
const WIDTH = 12;
const HEIGHT = 3;
function load();
function run();
function stop();
}
class computer {
function useUSB(USB $usb) { //參數裡邊類和介面是可以用類名來限制的. 這個方法裡只能傳這個介面或類的對象.
$usb -> load();
$usb -> run();
$usb -> stop();
}
}
class Mouse implements USB{
function load(){
echo "載入滑鼠成功<br>";
}
function run(){
echo "運行滑鼠<br>";
}
function stop(){
echo "滑鼠拔出<br>";
}
}
class keyPress implements USB {
function load(){
echo "載入鍵盤<br>";
}
function run(){
echo "運行鍵盤<br>";
}
function stop(){
echo "停止鍵盤<br>";
}
}
class worker {
function useing(){
$c = new computer();
$m = new Mouse();
$k = new KeyPress();
$c -> useUSB($k);
$c -> useUSB($m);
}
}
$wk = new worker();
$wk ->useing();
?>
結果:載入鍵盤
運行鍵盤
停止鍵盤
載入滑鼠成功
運行滑鼠
滑鼠拔出
PHP課程筆記9