PHP課程筆記9

來源:互聯網
上載者:User

標籤:

課時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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.