《PHP實(shí)戰(zhàn):PHP入門教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類,抽象方法等)》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):PHP入門教程之面向?qū)ο蟮奶匦苑治?繼承,多態(tài),接口,抽象類,抽象方法等),希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP教程本文實(shí)例講述了PHP面向?qū)ο蟮奶匦?分享給大家供大家參考,具體如下:
PHP教程Demo1.php
PHP教程
<?php
header('Content-Type:text/html; charset=utf-8;');
//創(chuàng)建一個電腦類
class Computer {
//什么叫做類內(nèi),就是創(chuàng)建類的花括號內(nèi)的范圍叫做類內(nèi),其他地方則類外.
//public 是對字段的公有化,這個字段類外即可訪問,賦值和取值
public $_name = '聯(lián)想';
}
$computer = new Computer();
$computer -> _name = 'Dell';
echo $computer->_name;
?>
PHP教程Demo2.php
PHP教程
<?php
header('Content-Type:text/html; charset=utf-8;');
class Computer {
//private 是私有化,即對字段進(jìn)行封裝的操作,類外無法訪問,取值和賦值都不能操作
private $_name = '聯(lián)想';
}
$computer = new Computer();
echo $computer->_name;
?>
PHP教程Demo3.php
PHP教程
<?php
header('Content-Type:text/html; charset=utf-8;');
class Computer {
private $_name = '聯(lián)想';
//這個時候我采用一個公共對外的方法來訪問私有字段
//因?yàn)樗接凶侄沃荒茉陬悆?nèi)訪問,而對外的公共方法是類內(nèi)的.
//更而公共方法又是公共的,所以類外又可訪問.
public function _run(){
//字段在類內(nèi)調(diào)用的時候必須是類 -> 字段,而$_name只是一個普通變量而已.
//字段在類外調(diào)用的方法是對象 -> 字段,而類內(nèi)就必須使用 Computer -> _name
//但是在本類中,可以使用一個關(guān)鍵字來代替字來代替 Computer ,那就是 $this
echo $this ->_name;
}
}
$computer = new Computer();
$computer -> _run();
?>
PHP教程Demo4.php
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;
}
//必須寫一個對內(nèi)的入口,對私有字段進(jìn)行賦值
public function setName($name) {
//這里的 $name 只是一個變量而已,參數(shù)而已
//$this->name 才是類的字段
$this->name = $name;
}
}
$computer = new Computer ();
echo $computer->getName();
$computer->setName('Dell');
echo $computer->getName();
?>
PHP教程Demo5.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
private $_name;
private $_model;
private $_cpu;
//當(dāng)類外的對象直接調(diào)用私有字段時,會跟著去檢查是否有攔截器,
//如果直接對 $_name 進(jìn)行賦值,那么__set 方法就會攔截住,就不會報錯了.
//采用攔截器進(jìn)行賦值和取值
//賦值
private function __set($_key,$_value){
//采用$_key = '_name',那么 $_value = '聯(lián)想';
//$this ->_name = '聯(lián)想';
$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 = '聯(lián)想';
$computer->_cpu = '四核';
$computer->_model = 'i7';
echo $computer->_name;
echo $computer->_cpu;
echo $computer->_model;
?>
PHP教程Demo6.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
private $_name;
private $_model;
private $_cpu;
//__set 和 __get 方法私有了,還是可以執(zhí)行,是因?yàn)?
//因?yàn)槟壳俺绦虻闹羔樢呀?jīng)在類內(nèi)了.而類內(nèi)可以執(zhí)行封裝的方法
//類內(nèi)執(zhí)行私有方法,不會出現(xiàn)任何錯誤.
//它只需要間接的攔截就可以了.攔截是在內(nèi)類執(zhí)行的.
//說白了,__set() 和 __get() 是 PHP 內(nèi)置的方法,具有一定的特殊性
private function __set($_key, $_value) {
$this->$_key = $_value;
}
private function __get($_key) {
return $this->$_key;
}
}
$computer = new Computer ();
$computer->_name = '聯(lián)想';
$computer->_cpu = '四核';
$computer->_model = 'i7';
echo $computer->_name;
echo $computer->_cpu;
echo $computer->_model;
?>
PHP教程Demo7.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
const NAME = 'DELL';
}
//常量的輸出方法 類::常量
echo Computer::NAME; //DELL
?>
PHP教程Demo8.php
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;
?>
PHP教程Demo9.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
public static $_count = 0;
public function _add(){
//如果是靜態(tài)成員字段,那么就應(yīng)該用 self 來調(diào)用,而不是 $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;
?>
PHP教程Demo10.php
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;
?>
PHP教程Demo11.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
}
$computer = new Computer();
echo $computer instanceof Computer;
?>
PHP教程Demo12.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
//這是父類,電腦類
class Computer {
public $_name = '聯(lián)想';
public function _run(){
echo '聯(lián)想在運(yùn)行!';
}
}
//子類,筆記本電腦類
class NoteComputer extends Computer {
}
$noteComputer = new NoteComputer();
echo $noteComputer -> _name;
$noteComputer -> _run();
?>
PHP教程Demo13.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
public $_name = '聯(lián)想';
public function _run(){
echo '聯(lián)想在運(yùn)行!';
}
}
class NoteComputer extends Computer {
//我不需要父類的字段和方法,那么可以采用重寫的方法覆蓋掉父類的字段和方法
public $_name = 'Dell';
public function _run(){
echo 'Dell在運(yùn)行!';
}
}
$noteComputer = new NoteComputer();
echo $noteComputer -> _name;
$noteComputer -> _run();
?>
PHP教程Demo14.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
//私有化,但是無法被子類繼承,這個時候就應(yīng)該用受保護(hù)的修飾符來封裝
protected $_name = '聯(lián)想';
protected function _run(){
return '聯(lián)想在運(yùn)行!';
}
}
class NoteComputer extends Computer {
public function getTop() {
echo $this->_name;
echo $this->_run();
}
}
$noteComputer = new NoteComputer();
$noteComputer -> getTop();
?>
PHP教程Demo15.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
class Computer {
public $_name = '聯(lián)想';
public function _run(){
return '聯(lián)想在運(yùn)行!';
}
}
class NoteComputer extends Computer {
//我子類已經(jīng)覆蓋了父類的字段和方法,
//但是我又要調(diào)用父類的字段和方法,那怎么辦呢?
public $_name = 'Dell';
public function _run(){
echo 'Dell在運(yùn)行!';
echo parent :: _run();
}
}
$noteComputer = new NoteComputer();
echo $noteComputer -> _name;
$noteComputer -> _run();
//DellDell在運(yùn)行!聯(lián)想在運(yùn)行!
?>
PHP教程Demo16.php
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();
?>
PHP教程Demo17.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
//創(chuàng)建一個抽象類,只要在 class 前面加上 abstract 就是抽象類了
//抽象類不能夠被實(shí)例化,就是創(chuàng)建對象
//只在類里面有一個抽象方法,那么這個類必須是抽象類,類前面必須加上 abstract
abstract class Computer {
public $_name = '聯(lián)想';
//抽象類里創(chuàng)建一個抽象方法
//抽象方法不能夠?qū)崿F(xiàn)方法體的內(nèi)容
abstract public function _run();
//我在抽象類里能否創(chuàng)建一個普通方法
public function _run2(){
echo '我是父類的普通方法';
}
}
//類不能夠?qū)崿F(xiàn)多繼承,只支持單繼承.
//抽象類是給子類用來繼承的,實(shí)現(xiàn)一種規(guī)范和資源的共享
class NoteComputer extends Computer {
//抽象類的抽象方法,子類必須重寫,不然會報錯.
//抽象類里的普通方法不需要重寫,子類會直接繼承下來
public function _run(){
echo '我是子類的方法';
}
}
$noteComputer = new NoteComputer();
$noteComputer -> _run();
$noteComputer -> _run2();
echo $noteComputer -> _name;
?>
PHP教程Demo18.php
PHP教程
<?php
/*
* 到底應(yīng)該用抽象類還是接口呢
* 如果你要繼承多個接口的方法規(guī)范,那么就用接口好了.
* 如果你要共享一個方法體內(nèi)容,那么就用抽象類.
* */
header ( 'Content-Type:text/html; charset=utf-8;' );
//創(chuàng)建一個接口
//接口也不能被實(shí)例化
//接口是為了規(guī)范實(shí)現(xiàn)它的子類,以達(dá)到統(tǒng)一的目的.也可以共享數(shù)據(jù)
interface Computer {
//成員字段必須是變量
const NAME = '成員 ';
//接口里的所有方法都是抽象方法,不能夠?qū)懛椒w
//并且接口的抽象方法不需要寫 abstract
public function _run();
public function _run2();
}
interface Computer2 {
public function _run3();
}
//子類繼承接口的說法,叫做實(shí)現(xiàn),接口可以多實(shí)現(xiàn)
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;
?>
PHP教程Demo19.php
PHP教程
<?php
header ( 'Content-Type:text/html; charset=utf-8;' );
//什么叫做多態(tài),字面意思,多種形態(tài)
//一個動作由不同的人去執(zhí)行,而產(chǎn)生不同的效果或者效果,即為多態(tài).
//一個人通過不同的狀態(tài)去執(zhí)行同一種動作,形成不同的效果,也可以稱作為多態(tài).
//園丁 剪 修理花草
//理發(fā)師 剪 理發(fā)
//總裁 剪 裁員
//人 筆記本 運(yùn)行 win7開機(jī)了
//人 臺式機(jī) 運(yùn)行 xp開機(jī)了
//創(chuàng)建一個接口,來規(guī)范運(yùn)行的方法
interface Computer {
public function version(); //這個方法表示采用什么電腦
public function work(); //這臺電腦是怎么運(yùn)行的
}
//創(chuàng)建一個筆記本的類實(shí)現(xiàn)接口
class NoteComputer implements Computer {
public function version() {
echo '筆記本';
}
public function work() {
echo '可以便攜式運(yùn)行 win7';
}
}
//創(chuàng)建一個臺式機(jī)的類實(shí)現(xiàn)接口
class DesktopComputer implements Computer {
public function version() {
echo '臺式機(jī)';
}
public function work() {
echo '在工作站運(yùn)行 XP';
}
}
//創(chuàng)建一個用戶
class Person {
//創(chuàng)建一個方法來接受電腦(筆記本電腦,也可以是臺式電腦)
//怎么接受,將他們的對象傳進(jìn)來就 OK 啦.
public function _run($type) {
echo '這個人的';
$type -> version();
$type ->work();
}
}
//多態(tài)的原理,就是類都寫好了,不要去修改它,只要在類外的調(diào)用參數(shù)的更改
//而最后的結(jié)果也會得到更改,那么這個就是多態(tài).
//有一個接口,兩個類,一個是筆記本的類,一個是臺式機(jī)的類
//創(chuàng)建了筆記本
$noteComputer = new NoteComputer();
//創(chuàng)建臺式機(jī)
$desktopComputer = new DesktopComputer();
//創(chuàng)建一個人
$person = new Person();
//使用電腦
$person -> _run($noteComputer); //這種傳遞,叫做對象引用的傳遞
?>
PHP教程更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
PHP教程希望本文所述對大家PHP程序設(shè)計有所幫助.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/3906.html