面向對象的基本概念,面向對象編程,oop,面向對象,面向對象的分析,面向對象的設計,面向對象的編程,什麼是類。php
類,屬性和方法,類,對象,面向對象編程的三大特色。特色,封裝性,繼承性,多態性。css
封裝性,也能夠稱爲信息隱藏。
繼承性就是派生類(子類)自動繼承一個或多個基類(父類)中的屬性與方法,並能夠重寫或添加新的屬性或方法。
多態性是指同一個類的不一樣對象,使用同一個方法能夠得到不一樣的結果,這種技術稱爲多態性。html
類的定義,成員方法,類的實例化,成員變量,類常量,構造方法和析構方法,繼承和多態的實現,數據的隱藏,靜態變量。數據庫
類的定義:編程
<?php class SpoObject{ //定義類 //… } ?>
成員方法:數組
<?php class SportObject{ function beatBasketball()($name,$height,$avoirdupois,$age,$sex){ //聲明成員方法 echo "姓名:".$name; //方法實現的功能 } } ?>
類的實例化:dom
對象名 -> 成員方法
成員變量
類中的變量,也稱爲成員變量函數
關鍵字 成員變量名
對象名 -> 成員變量oop
類常量
常量就是不會改變的量,是一個恆值。
定義常量使用關鍵字const
輸出格式:學習
類名::常量名
構造方法和析構方法
void __construct([mixed args [,…]]) void __destruct ( void )
示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>成員變量</title> <style type="text/css"> <!-- body,td,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <?php class SportObject{ public $name; //定義成員變量 public $height; //定義成員變量 public $avoirdupois; //定義成員變量 public function bootFootBall($name,$height,$avoirdupois){ //聲明成員方法 $this->name=$name; $this->height=$height; $this->avoirdupois=$avoirdupois; if($this->height<185 and $this->avoirdupois<85){ return $this->name.",符合踢足球的要求!"; //方法實現的功能 }else{ return $this->name.",不符合踢足球的要求!"; //方法實現的功能 } } } $sport=new SportObject(); //實例化類,並傳遞參數 echo $sport->bootFootBall('1','185','80'); //執行類中的方法 ?> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>成員方法</title> <style type="text/css"> <!-- body,td,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <?php class SportObject{ function beatBasketball($name,$height,$avoirdupois,$age,$sex){ //聲明成員方法 if($height>180 and $avoirdupois<=100){ return $name.",符合打籃球的要求!"; //方法實現的功能 }else{ return $name.",不符合打籃球的要求!"; //方法實現的功能 } } } $sport=new SportObject(); echo $sport->beatBasketball('1','185','80','20週歲','男'); ?> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>常量</title> <style type="text/css"> <!-- body,td,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <?php class SportObject{ const BOOK_TYPE = '計算機圖書'; public $object_name; //圖書名稱 function setObjectName($name){ //聲明方法setObjectName() $this -> object_name = $name; //設置成員變量值 } function getObjectName(){ //聲明方法getObjectName() return $this -> object_name; } } $c_book = new SportObject(); //實例化對象 $c_book -> setObjectName("PHP類"); //調用方法setObjectName echo SportObject::BOOK_TYPE."->"; //輸出常量BOOK_TYPE echo $c_book -> getObjectName(); //調用方法getObjectName ?> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>構造方法</title> <style type="text/css"> <!-- body,td,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <?php class SportObject{ public $name; //定義成員變量 public $height; //定義成員變量 public $avoirdupois; //定義成員變量 public $age; //定義成員變量 public $sex; //定義成員變量 public function __construct($name,$height,$avoirdupois,$age,$sex){ //定義構造方法 $this->name=$name; //爲成員變量賦值 $this->height=$height; //爲成員變量賦值 $this->avoirdupois=$avoirdupois; //爲成員變量賦值 $this->age=$age; //爲成員變量賦值 $this->sex=$sex; //爲成員變量賦值 } public function bootFootBall(){ //聲明成員方法 if($this->height<185 and $this->avoirdupois<85){ return $this->name.",符合踢足球的要求!"; //方法實現的功能 }else{ return $this->name.",不符合踢足球的要求!"; //方法實現的功能 } } } $sport=new SportObject('1','185','80','20','男'); //實例化類,並傳遞參數 echo $sport->bootFootBall(); //執行類中的方法 ?> </body> </html>
析構方法,是對象被銷燬時被調用的,做用是釋放內存。
void __destruct ( void )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>析構方法</title> </head> <body> <?php class SportObject{ public $name; //定義成員變量 public $height; //定義成員變量 public $avoirdupois; //定義成員變量 public $age; //定義成員變量 public $sex; //定義成員變量 public function __construct($name,$height,$avoirdupois,$age,$sex){ //定義構造方法 $this->name=$name; //爲成員變量賦值 $this->height=$height; //爲成員變量賦值 $this->avoirdupois=$avoirdupois; //爲成員變量賦值 $this->age=$age; //爲成員變量賦值 $this->sex=$sex; //爲成員變量賦值 } public function bootFootBall(){ //聲明成員方法 if($this->height<185 and $this->avoirdupois<85){ return $this->name.",符合踢足球的要求!"; //方法實現的功能 }else{ return $this->name.",不符合踢足球的要求!"; //方法實現的功能 } } function __destruct(){ echo "<p><b>對象被銷燬,調用析構函數。</b></p>"; } } $sport=new SportObject('1','185','80','20','男'); //實例化類,並傳遞參數 //unset($sport); ?> </body> </html>
全部成員變量和方法
構造函數
先調用子類中的方法
去調用父類中的構造方法
class subClass extends superClass{ … }
多態存在兩種形式:覆蓋和重載。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>繼承的實現</title> <style type="text/css"> </head> <body> <?php /* 父類 */ class SportObject{ public $name; //定義姓名成員變量 public $age; //定義年齡成員變量 public $avoirdupois; //定義體重成員變量 public $sex; //定義性別成員變量 public function __construct($name,$age,$avoirdupois,$sex){ //定義構造方法 $this->name=$name; //爲成員變量賦值 $this->age=$age; //爲成員變量賦值 $this->avoirdupois=$avoirdupois; //爲成員變量賦值 $this->sex=$sex; //爲成員變量賦值 } function showMe(){ //定義方法 echo '這句話不會顯示。'; } } /* 子類BeatBasketBall */ class BeatBasketBall extends SportObject{ //定義子類,繼承父類 public $height; //定義身高成員變量 function __construct($name,$height){ //定義構造方法 $this -> height = $height; //爲成員變量賦值 $this -> name = $name; //爲成員變量賦值 } function showMe(){ //定義方法 if($this->height>185){ return $this->name.",符合打籃球的要求!"; //方法實現的功能 }else{ return $this->name.",不符合打籃球的要求!"; //方法實現的功能 } } } /* 子類WeightLifting */ class WeightLifting extends SportObject{ //繼承父類 function showMe(){ //定義方法 if($this->avoirdupois<85){ return $this->name.",符合舉重的要求!"; //方法實現的功能 }else{ return $this->name.",不符合舉重的要求!"; //方法實現的功能 } } } //實例化對象 $beatbasketball = new BeatBasketBall('','190'); //實例化子類 $weightlifting = new WeightLifting('','185','80','20','男'); echo $beatbasketball->showMe()."<br>"; //輸出結果 echo $weightlifting->showMe()."<br>"; ?> </body> </html>
繼承的實現
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>繼承的實現</title> <style type="text/css"> </head> <body> <?php /* 父類 */ class SportObject{ public $name; //定義姓名成員變量 public $age; //定義年齡成員變量 public $avoirdupois; //定義體重成員變量 public $sex; //定義性別成員變量 public function __construct($name,$age,$avoirdupois,$sex){ //定義構造方法 $this->name=$name; //爲成員變量賦值 $this->age=$age; //爲成員變量賦值 $this->avoirdupois=$avoirdupois; //爲成員變量賦值 $this->sex=$sex; //爲成員變量賦值 } function showMe(){ //定義方法 echo '這句話不會顯示。'; } } /* 子類BeatBasketBall */ class BeatBasketBall extends SportObject{ //定義子類,繼承父類 public $height; //定義身高成員變量 function __construct($name,$height){ //定義構造方法 $this -> height = $height; //爲成員變量賦值 $this -> name = $name; //爲成員變量賦值 } function showMe(){ //定義方法 if($this->height>185){ return $this->name.",符合打籃球的要求!"; //方法實現的功能 }else{ return $this->name.",不符合打籃球的要求!"; //方法實現的功能 } } } /* 子類WeightLifting */ class WeightLifting extends SportObject{ //繼承父類 function showMe(){ //定義方法 if($this->avoirdupois<85){ return $this->name.",符合舉重的要求!"; //方法實現的功能 }else{ return $this->name.",不符合舉重的要求!"; //方法實現的功能 } } } //實例化對象 $beatbasketball = new BeatBasketBall('','190'); //實例化子類 $weightlifting = new WeightLifting('','185','80','20','男'); echo $beatbasketball->showMe()."<br>"; //輸出結果 echo $weightlifting->showMe()."<br>"; ?> </body> </html>
重載:
傳遞的參數個數不一樣,調用不一樣的方法,返回不一樣的值。
<?php class C{ function __call($name,$num){ //調用不存在的方法 echo "方法名稱:" . $name . "<p>"; //輸出方法名 echo "參數存在個數:" . count($num) . "<p>"; //輸出參數個數 if (count($num) == 1){ //根據參數個數調用不一樣的方法 echo $this->list1($a); } if (count($num) == 2){ //根據參數個數調用不一樣的方法 echo $this->list2($a,$b); } } public function list1($a){ //定義方法 return "這是list1函數"; } public function list2($a,$b){ //定義方法 return "這是list2函數"; } } $a = new C; //類的實例化 $a->listshow(1,2); //調用方法,傳遞參數 ?>
關鍵字::變量名/常量名/方法名
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>僞變量$this</title> </head> <body> <?php class example{ function exam(){ if(isset($this)){ echo '$this的值爲:'.get_class($this); }else{ echo '$this未定義'; } } } $class_name = new example(); $class_name->exam(); ?> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>「::」操做符</title> </head> <body> <?php class Book{ const NAME = 'computer'; //常量NAME function __construct(){ //構造方法 echo '本月圖書類冠軍爲:'.Book::NAME.' '; //輸出默認值 } } class l_book extends Book{ //Book類的子類 const NAME = 'foreign language'; //聲明常量 function __construct(){ //子類的構造方法 parent::__construct(); //調用父類的構造方法 echo '本月圖書類冠軍爲:'.self::NAME.' '; //輸出本類中的默認值 } } $obj = new l_book(); //實例化對象 ?> </body> </html>
parent: 能夠調用父類中的成員變量,成員方法和常量。
self:能夠調用當前類中的靜態成員和常量。
類名:能夠調用本類中的變量,常量和方法。
數據隱藏
public(公共成員)
private(私有成員)
protected(保護成員)
public, private, protected, static, final
靜態變量(方法)
關鍵字::靜態成員
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>private關鍵字</title> </head> <body> <?php class Book{ private $name = 'computer'; //聲明私有變量$name public function setName($name){ //設置私有變量 $this -> name = $name; } public function getName(){ //讀取私有變量 return $this -> name; } } class LBook extends Book{ //Book類的子類 } $lbook = new LBook(); //實例化對象 echo '正確操做私有變量的方法:'; $lbook -> setName("PHP"); //對私有變量進行操做 echo $lbook -> getName(); echo '<br>直接操做私有變量的結果:'; //對私有變量進行操做 echo Book::$name; ?> </body> </html>
private只能在所屬類的內部被調和修改,不能夠在類外被訪問。
protected修飾的類成員,能夠在本類和子類中被調用,其餘地方不能夠被調用。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>protected關鍵字</title> </head> <body> <?php class Book{ protected $name = 'computer'; //聲明保護變量$name } class LBook extends Book{ //Book類的子類 public function showMe(){ echo '對於protected修飾的變量,在子類中是能夠直接調用的。如:$name = '.$this -> name; } } $lbook = new LBook(); //實例化對象 $lbook -> showMe(); echo '<p>但在其餘的地方是不能夠調用的,不然:'; //對私有變量進行操做 $lbook -> name = 'history'; ?> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>protected關鍵字</title> </head> <body> <?php class Book{ protected $name = 'computer'; //聲明保護變量$name } class LBook extends Book{ //Book類的子類 public function showMe(){ echo '對於protected修飾的變量,在子類中是能夠直接調用的。如:$name = '.$this -> name; } } $lbook = new LBook(); //實例化對象 $lbook -> showMe(); echo '<p>但在其餘的地方是不能夠調用的,不然:'; //對私有變量進行操做 $lbook -> name = '會報錯,這裏就錯了'; ?> </body> </html>
靜態變量:
關鍵字::靜態成員
self,在類內部調用 靜態成員所使用
在靜態方法中,只能調用靜態變量,不能調用普通變量,而普通方法能夠調用靜態變量。
對象被銷燬後,仍然保存被修改的靜態數據。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>靜態變量的使用</title> </head> <body> <?php class Book{ //Book類 static $num = 0; //聲明一個靜態變量$num,初值爲0 public function showMe(){ //申明一個方法 echo '您是第'.self::$num.'位訪客'; //輸出靜態變量 self::$num++; //將靜態變量加1 } } $book1 = new Book(); //實例化對象$book1 $book1 -> showMe(); //調用showMe()方法 echo "<br>"; $book2 = new Book(); //實例化對象$book2; $book2 -> showMe(); //再次調用showMe()方法 echo "<br>"; echo '您是第'.Book::$num.'爲訪客'; //直接使用類名調用靜態變量 ?> </body> </html>
運行效果是:
您是第0位訪客
您是第1位訪客
您是第2位訪客
對象的高級應用
final關鍵字,抽象類,接口的使用,克隆對象,對象比較,對象類型檢測,魔術方法。
不能夠被繼承,不能有子類 final class class_name{ //… } final function method_name() 不能夠重寫和覆蓋
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>final類</title> ></head> <body> <?php final class SportObject{ function __construct(){ echo '不能被繼承,不能有子類'; } } class MyBook extends SportObject{ static function exam(){ echo "會報錯的"; } } MyBook::exam(); ?> </body> </html>
抽象類,是不能被實例化的類,只能做爲父類來使用:
abstract class AbstractName{ … }
抽象類,同樣有成員變量,成員方法,抽象類至少包含一個抽象方法,抽象方法沒有方法體,其功能在子類完成。
abstract function abstractName();
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>抽象類</title> </head> <body> <?php abstract class CommodityObject{ //定義抽象類 abstract function service($getName,$price,$num); //定義抽象方法 } class MyBook extends CommodityObject{ //定義子類,繼承抽象類 function service($getName,$price,$num){ //定義方法 echo '您購買的商品是'.$getName.',該商品的價格是:'.$price.' 元。'; echo '您購買的數量爲:'.$num.' 本。'; echo '如發現缺頁,請在3日內更換。'; } } class MyComputer extends CommodityObject{ //定義子類繼承父類 function service($getName,$price,$num){ //定義方法 echo '您購買的商品是'.$getName.',該商品的價格是:'.$price.' 元。'; echo '您購買的數量爲:'.$num.' 臺。'; echo '如發生非人爲質量問題,請在3個月內更換。'; } } $book = new MyBook(); //實例化子類 $computer = new MyComputer(); //實例化子類 $book -> service('PHP',5,3); //調用方法 echo '<p>'; $computer -> service('XX本',800,1); //調用方法 ?> </body> </html>
interface InterfaceName{ function interfaceName1(); function interfaceName2(); … } class SubClass implements InterfaceName1,InterfaceName2{ function interfaceName1(){ //功能實現 } function interfaceName2(){ //功能實現 } … }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>接口</title> </head> <body> <?php interface MPopedom{ function popedom(); } interface MPurview{ function purview(); } class Member implements MPurview{ function purview(){ echo '會員'; } } class Manager implements MPurview,MPopedom{ function purview(){ echo '管理員擁有所有權限。'; } function popedom(){ echo '管理員尚未的權限'; } } $member = new Member(); $manager = new Manager(); $member -> purview(); echo '<p>'; $manager -> purview(); $manager ->popedom(); ?> </body> </html>
克隆對象
$object1 = new ClassName(); $object2 = clone $object1;
__clone()方法,調用__clone()方法,能夠克隆出來的對象的一些行爲及屬性
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>對象的引用</title> </head> <body> <?php class SportObject{ //類SportObject private $object_type = 'book'; //聲明私有變量$object_type,並賦初值等於「book」 public function setType($type){ //聲明成員方法setType,爲變量$object_type賦值 $this -> object_type = $type; } public function getType(){ //聲明成員方法getType,返回變量$object_type的值 return $this -> object_type; } } $book1 = new SportObject(); //實例化對象$book1 $book2 = $book1; //使用普通數據類型的方法給對象$book2賦值 $book2 -> setType('computer'); //改變對象$book2的值 echo '對象$book1的值爲:'.$book1 -> getType(); //輸出對象$book1的值 ?> </body> </html>
對象比較
兩個等號「==」是比較兩個對象的內容
3個等號「===」是比較對象的引用地址
對象類型檢測
instanceof操做符能夠檢測當前對象是屬於哪一個類
ObjectName instanceof ClassName
魔術方法
__construct()、__destruct()和__clone() __set()和__get()方法 __call()方法 __sleep()和__wakeup()方法 __toString()方法 __autoload()方法
__call()方法包含兩個參數,即方法名和方法參數
方法參數是以數組形式存在的
_set()方法包含兩個參數,分別表示變量名稱和變量值
__get()方法有一個參數,表示要調用的變量名
使用serialize()函數能夠實現序列化對象
unserialize()函數能夠從新還原一個被serialize()函數序列化的對象
__sleep()方法能夠清除對象並返回一個該對象中全部變量的數組
__wakeup()方法則是恢復在序列化中可能丟失的數據庫鏈接及相關工做
__toString()方法將對象轉化爲字符串
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>對象的比較</title> </head> <body> <?php class SportObject{ private $name; function __construct($name){ $this -> name = $name; } } $book = new SportObject('book'); $cloneBook = clone $book; $referBook = $book; if($cloneBook == $book){ echo '兩個對象的內容相等<br>'; } if($referBook === $book){ echo '兩個對象的引用地址相等<br>'; } ?> </body> </html>
對象的比較
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>對象的比較</title> </head> <body> <?php class SportObject{ private $name; function __construct($name){ $this -> name = $name; } } $book = new SportObject('book'); $cloneBook = clone $book; $referBook = $book; if($cloneBook == $book){ echo '兩個對象的內容相等<br>'; } if($referBook === $book){ echo '兩個對象的引用地址相等<br>'; } ?> </body> </html>
對象類型檢測
instanceof操做符能夠檢測當前對象是屬於哪一個類
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>對象類型檢測</title> </head> <body> <?php class SportObject{} class MyBook extends SportObject{ private $type; } $cBook = new MyBook(); if($cBook instanceof MyBook) echo '對象$cBook屬於MyBook類<br>'; if($cBook instanceof SportObject) echo '對象$cBook屬於SportObject類<br>'; ?> </body> </html>
測試結果:
對象$cBook屬於MyBook類 對象$cBook屬於SportObject類
魔術方法:
__set()和__get()方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>__set()和__get()方法</title> </head> <body> <?php class SportObject { private $type = ' '; public function getType(){ return $this -> type; } private function __get($name){ if(isset($this ->$name)){ echo '變量'.$name.'的值爲:'.$this -> $name.'<br>'; } else{ echo '變量'.$name.'未定義,初始化爲0<br>'; $this -> $name = 0; } } private function __set($name, $value){ if(isset($this -> $name)){ $this -> $name = $value; echo '變量'.$name.'賦值爲:'.$value.'<br>'; }else{ $this -> $name = $value; echo '變量'.$name.'被初始化爲:'.$value.'<br>'; } } } $MyComputer = new SportObject(); $MyComputer -> type = 'DIY'; $MyComputer -> type; $MyComputer -> name; ?> </body> </html>
變量type賦值爲:DIY
變量type的值爲:DIY
變量name未定義,初始化爲0
變量name被初始化爲:0
__call()方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>__call()方法</title> </head> <body> <?php class SportObject { public function myDream(){ echo '調用的方法存在,直接執行此方法。<p>'; } public function __call($method, $parameter) { echo '若是方法不存在,則執行__call()方法。<br>'; echo '方法名爲:'.$method.'<br>'; echo '參數有:'; var_dump($parameter); } } $MyLife = new SportObject(); $MyLife -> myDream(); $MyLife -> mDream('how','what','why'); ?> </body> </html>
__sleep()和__wakeup()方法
__sleep()方法能夠清除對象並返回一個包含對象中全部變量的數組。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>__sleep()和__wakeup()方法</title> </head> <body> <?php class SportObject{ private $type = 'DIY'; public function getType(){ return $this -> type; } public function __sleep(){ echo '使用serialize()函數將對象保存起來,能夠存放到文本文件、數據庫等地方<br>'; return $this; } public function __wakeup(){ echo '當須要該數據時,使用unserialize()函數對已序列化的字符串進行操做,將其轉換回對象<br>'; } } $myBook = new SportObject(); $i = serialize($myBook); echo '序列化後的字符串:'.$i.'<br>'; $reBook = unserialize($i); echo '還原後的成員變量:'.$reBook -> getType(); ?> </body> </html>
__toString()方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>__toString()方法</title> </head> <body> <?php class SportObject{ private $type = 'DIY'; public function __toString(){ return $this -> type; } } $myComputer = new SportObject(); echo '對象$myComputer的值爲:'; echo $myComputer; ?> </body> </html>
__autoload()方法自動實例化須要使用的類
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>__autoload()方法自動實例化須要使用的類</title> </head> <body> <?php function __autoload($class_name){ $class_path = $class_name.'.class.php'; if(file_exists($class_path)){ include_once($class_path); }else echo '類路徑錯誤。'; } $myBook = new SportObject("江山代有人才出 各領風騷數百年"); echo $myBook; ?> </body> </html> <?php class SportObject{ private $cont; public function __construct($cont){ $this -> cont = $cont; } public function __toString(){ return $this -> cont; } } ?>
中文字符串的截取類
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>中文字符串的截取類</title> </head> <body> <?php class MsubStr{ function csubstr($str, $start, $len) { //$str指的是字符串,$start指的是字符串的起始位置,$len指的是長度。 $strlen = $start + $len; //用$strlen存儲字符串的總長度(從字符串的起始位置到字符串的總長度) for($i = 0; $i < $strlen; $i ++) { //經過for循環語句,循環讀取字符串 if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { //若是字符串中首個字節的ASCII序數值大於0xa0,則表示爲漢字 $tmpstr .= substr ( $str, $i, 2 ); //每次取出兩位字符賦給變量$tmpstr,即等於一個漢字 $i ++; //變量自加1 } else { //若是不是漢字,則每次取出一位字符賦給變量$tmpstr $tmpstr .= substr ( $str, $i, 1 ); } } return $tmpstr; //輸出字符串 } } $mc=new MsubStr(); //類的實例化 ?> <table width="204" height="195" border="0" cellpadding="0" cellspacing="0" background="images/bg.JPG"> <tr> <td width="25" height="37"> </td> <td width="157"> </td> <td width="22"> </td> </tr> <tr> <td height="30"> </td> <td><?php $string="關注!"; if(strlen($string)>10){ echo substr($string,0,9)."..."; }else{ echo $string; } ?> </td> <td> </td> </tr> <tr> <td height="30"> </td> <td><?php $string="關注"; if(strlen($string)>10){ echo substr($string,0,9)."..."; }else{ echo $string; } ?></td> <td> </td> </tr> <tr> <td height="30"> </td> <td> <?php $strs="關注"; if(strlen($string)>10){ echo $mc ->csubstr($strs, "0" , "9")."..."; }else{ echo $strs; } ?> </td> <td> </td> </tr> <tr> <td height="30"> </td> <td><?php $strs="關注"; if(strlen($string)>30){ echo $mc ->csubstr($strs, "0" , "20")."..."; }else{ echo $strs; } ?> </td> <td> </td> </tr> <tr> <td height="38"> </td> <td> </td> <td> </td> </tr> </table> </body> </html> <?php class MsubStr{ function csubstr($str, $start, $len) { //$str指的是字符串,$start指的是字符串的起始位置,$len指的是長度。 $strlen = $start + $len; //用$strlen存儲字符串的總長度(從字符串的起始位置到字符串的總長度) for($i = 0; $i < $strlen; $i ++) { //經過for循環語句,循環讀取字符串 if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { //若是字符串中首個字節的ASCII序數值大於0xa0,則表示爲漢字 $tmpstr .= substr ( $str, $i, 2 ); //每次取出兩位字符賦給變量$tmpstr,即等於一個漢字 $i ++; //變量自加1 } else { //若是不是漢字,則每次取出一位字符賦給變量$tmpstr $tmpstr .= substr ( $str, $i, 1 ); } } return $tmpstr; //輸出字符串 } } ?>
<?php class changecode{ private $str; private $input; private $output; function __construct($input='',$output='gb2312'){ $this->input = $input; $this->output = $output; } protected function chgcode($str){ if($this->input != ''){ $this->str = iconv($input,$output,$str); }else{ $this->str = mb_convert_encoding($str,$output); } } function getStr($str){ $this->chgcode($str); return $this->str; } function setInput($input){ $this->input = $input; } function setOutput($output){ $this->output = $output; } function getInput(){ return $this->input; } function getOutput(){ return $this->output; } } ?>
好了,歡迎在留言區留言,與你們分享你的經驗和心得。
感謝你學習今天的內容,若是你以爲這篇文章對你有幫助的話,也歡迎把它分享給更多的朋友,感謝。
感謝!承蒙關照!您真誠的讚揚是我前進的最大動力!