本文實例講述了PHP面向對象的特性。分享給大家供大家參考,具體如下:
Demo1.php
<?php header('Content-Type:text/html; charset=utf-8;'); //創建一個電腦類 class Computer { //什麼叫做類內,就是創建類的花括號內的范圍叫做類內,其他地方則類外。 //public 是對字段的公有化,這個字段類外即可訪問,賦值和取值 public $_name = '聯想'; } $computer = new Computer(); $computer -> _name = 'Dell'; echo $computer->_name; ?>
Demo2.php
<?php header('Content-Type:text/html; charset=utf-8;'); class Computer { //private 是私有化,即對字段進行封裝的操作,類外無法訪問,取值和賦值都不能操作 private $_name = '聯想'; } $computer = new Computer(); echo $computer->_name; ?>
Demo3.php
<?php header('Content-Type:text/html; charset=utf-8;'); class Computer { private $_name = '聯想'; //這個時候我采用一個公共對外的方法來訪問私有字段 //因為私有字段只能在類內訪問,而對外的公共方法是類內的。 //更而公共方法又是公共的,所以類外又可訪問。 public function _run(){ //字段在類內調用的時候必須是類 -> 字段,而$_name只是一個普通變量而已。 //字段在類外調用的方法是對象 -> 字段,而類內就必須使用 Computer -> _name //但是在本類中,可以使用一個關鍵字來代替字來代替 Computer ,那就是 $this echo $this ->_name; } } $computer = new Computer(); $computer -> _run(); ?>
Demo4.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { private $name; private $model; private $cpu; private $keyboard; private $show; private $zb; //必須寫個對外的入口,才可以取到 public function getName() { return $this->name; } //必須寫一個對內的入口,對私有字段進行賦值 public function setName($name) { //這裡的 $name 只是一個變量而已,參數而已 //$this->name 才是類的字段 $this->name = $name; } } $computer = new Computer (); echo $computer->getName(); $computer->setName('Dell'); echo $computer->getName(); ?>
Demo5.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { private $_name; private $_model; private $_cpu; //當類外的對象直接調用私有字段時,會跟著去檢查是否有攔截器, //如果直接對 $_name 進行賦值,那麼__set 方法就會攔截住,就不會報錯了。 //采用攔截器進行賦值和取值 //賦值 private function __set($_key,$_value){ //采用$_key = '_name',那麼 $_value = '聯想'; //$this ->_name = '聯想'; $this ->$_key = $_value; } //取值 private function __get($_key){ return $this -> $_key; //如果 $_key = '_name' 那麼 $this -> _name; //如果 $_key = '_cpu' 那麼 $this -> _cpu; //如果 $_key = '_model' 那麼 $this -> _model; } } $computer = new Computer (); $computer->_name = '聯想'; $computer->_cpu = '四核'; $computer->_model = 'i7'; echo $computer->_name; echo $computer->_cpu; echo $computer->_model; ?>
Demo6.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { private $_name; private $_model; private $_cpu; //__set 和 __get 方法私有了,還是可以執行,是因為 //因為目前程序的指針已經在類內了。而類內可以執行封裝的方法 //類內執行私有方法,不會出現任何錯誤。 //它只需要間接的攔截就可以了。攔截是在內類執行的。 //說白了,__set() 和 __get() 是 PHP 內置的方法,具有一定的特殊性 private function __set($_key, $_value) { $this->$_key = $_value; } private function __get($_key) { return $this->$_key; } } $computer = new Computer (); $computer->_name = '聯想'; $computer->_cpu = '四核'; $computer->_model = 'i7'; echo $computer->_name; echo $computer->_cpu; echo $computer->_model; ?>
Demo7.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { const NAME = 'DELL'; } //常量的輸出方法 類::常量 echo Computer::NAME; //DELL ?>
Demo8.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { public $_count = 0; public function _add(){ $this -> _count++; //$_count = $_count+1 $_count++ } } //做一個累計的效果 $computer1 = new Computer(); $computer1 ->_add(); $computer1 ->_add(); $computer1 ->_add(); echo $computer1 -> _count; echo '<br />'; $computer2 = new Computer(); $computer2 ->_add(); $computer2 ->_add(); $computer2 ->_add(); echo $computer2 -> _count; ?>
Demo9.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { public static $_count = 0; public function _add(){ //如果是靜態成員字段,那麼就應該用 self 來調用,而不是 $this self::$_count++; } } //做一個累計的效果 $computer1 = new Computer(); $computer1 ->_add(); echo Computer::$_count; $computer1 ->_add(); echo Computer::$_count; $computer1 ->_add(); echo Computer::$_count; echo '<br />'; $computer2 = new Computer(); $computer2 ->_add(); echo Computer::$_count; $computer2 ->_add(); echo Computer::$_count; $computer2 ->_add(); echo Computer::$_count; ?>
Demo10.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { public static $_count = 0; public static function _add(){ self::$_count++; } } Computer::_add(); Computer::_add(); Computer::_add(); echo Computer::$_count; ?>
Demo11.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { } $computer = new Computer(); echo $computer instanceof Computer; ?>
Demo12.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); //這是父類,電腦類 class Computer { public $_name = '聯想'; public function _run(){ echo '聯想在運行!'; } } //子類,筆記本電腦類 class NoteComputer extends Computer { } $noteComputer = new NoteComputer(); echo $noteComputer -> _name; $noteComputer -> _run(); ?>
Demo13.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { public $_name = '聯想'; public function _run(){ echo '聯想在運行!'; } } class NoteComputer extends Computer { //我不需要父類的字段和方法,那麼可以采用重寫的方法覆蓋掉父類的字段和方法 public $_name = 'Dell'; public function _run(){ echo 'Dell在運行!'; } } $noteComputer = new NoteComputer(); echo $noteComputer -> _name; $noteComputer -> _run(); ?>
Demo14.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { //私有化,但是無法被子類繼承,這個時候就應該用受保護的修飾符來封裝 protected $_name = '聯想'; protected function _run(){ return '聯想在運行!'; } } class NoteComputer extends Computer { public function getTop() { echo $this->_name; echo $this->_run(); } } $noteComputer = new NoteComputer(); $noteComputer -> getTop(); ?>
Demo15.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); class Computer { public $_name = '聯想'; public function _run(){ return '聯想在運行!'; } } class NoteComputer extends Computer { //我子類已經覆蓋了父類的字段和方法, //但是我又要調用父類的字段和方法,那怎麼辦呢? public $_name = 'Dell'; public function _run(){ echo 'Dell在運行!'; echo parent :: _run(); } } $noteComputer = new NoteComputer(); echo $noteComputer -> _name; $noteComputer -> _run(); //DellDell在運行!聯想在運行! ?>
Demo16.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); //final 如果加在類前面,表示這個類不能被繼承 // final class Computer { // } class Computer { //final 如果加在方法前面,表示不能夠重寫些方法 final public function _run(){ } } class NoteComputer extends Computer { public function _run(){ } } $noteComputer = new NoteComputer(); ?>
Demo17.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); //創建一個抽象類,只要在 class 前面加上 abstract 就是抽象類了 //抽象類不能夠被實例化,就是創建對象 //只在類裡面有一個抽象方法,那麼這個類必須是抽象類,類前面必須加上 abstract abstract class Computer { public $_name = '聯想'; //抽象類裡創建一個抽象方法 //抽象方法不能夠實現方法體的內容 abstract public function _run(); //我在抽象類裡能否創建一個普通方法 public function _run2(){ echo '我是父類的普通方法'; } } //類不能夠實現多繼承,只支持單繼承。 //抽象類是給子類用來繼承的,實現一種規范和資源的共享 class NoteComputer extends Computer { //抽象類的抽象方法,子類必須重寫,不然會報錯。 //抽象類裡的普通方法不需要重寫,子類會直接繼承下來 public function _run(){ echo '我是子類的方法'; } } $noteComputer = new NoteComputer(); $noteComputer -> _run(); $noteComputer -> _run2(); echo $noteComputer -> _name; ?>
Demo18.php
<?php /* * 到底應該用抽象類還是接口呢 * 如果你要繼承多個接口的方法規范,那麼就用接口好了。 * 如果你要共享一個方法體內容,那麼就用抽象類。 * */ header ( 'Content-Type:text/html; charset=utf-8;' ); //創建一個接口 //接口也不能被實例化 //接口是為了規范實現它的子類,以達到統一的目的。也可以共享數據 interface Computer { //成員字段必須是變量 const NAME = '成員 '; //接口裡的所有方法都是抽象方法,不能夠寫方法體 //並且接口的抽象方法不需要寫 abstract public function _run(); public function _run2(); } interface Computer2 { public function _run3(); } //子類繼承接口的說法,叫做實現,接口可以多實現 class NoteComputer implements Computer,Computer2 { public function _run() { echo '我重寫了run'; } public function _run3() { echo '我重寫了run3'; } public function _run2() { echo '我重寫了run2'; } } $noteComputer = new NoteComputer(); $noteComputer -> _run(); $noteComputer -> _run2(); $noteComputer -> _run3(); echo NoteComputer::NAME; //接口 :: 常量 //echo Computer::NAME; ?>
Demo19.php
<?php header ( 'Content-Type:text/html; charset=utf-8;' ); //什麼叫做多態,字面意思,多種形態 //一個動作由不同的人去執行,而產生不同的效果或者效果,即為多態。 //一個人通過不同的狀態去執行同一種動作,形成不同的效果,也可以稱作為多態。 //園丁 剪 修理花草 //理發師 剪 理發 //總裁 剪 裁員 //人 筆記本 運行 win7開機了 //人 台式機 運行 xp開機了 //創建一個接口,來規范運行的方法 interface Computer { public function version(); //這個方法表示采用什麼電腦 public function work(); //這台電腦是怎麼運行的 } //創建一個筆記本的類實現接口 class NoteComputer implements Computer { public function version() { echo '筆記本'; } public function work() { echo '可以便攜式運行 win7'; } } //創建一個台式機的類實現接口 class DesktopComputer implements Computer { public function version() { echo '台式機'; } public function work() { echo '在工作站運行 XP'; } } //創建一個用戶 class Person { //創建一個方法來接受電腦(筆記本電腦,也可以是台式電腦) //怎麼接受,將他們的對象傳進來就 OK 啦。 public function _run($type) { echo '這個人的'; $type -> version(); $type ->work(); } } //多態的原理,就是類都寫好了,不要去修改它,只要在類外的調用參數的更改 //而最後的結果也會得到更改,那麼這個就是多態。 //有一個接口,兩個類,一個是筆記本的類,一個是台式機的類 //創建了筆記本 $noteComputer = new NoteComputer(); //創建台式機 $desktopComputer = new DesktopComputer(); //創建一個人 $person = new Person(); //使用電腦 $person -> _run($noteComputer); //這種傳遞,叫做對象引用的傳遞 ?>
更多關於PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《PHP網絡編程技巧總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。