php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程
面向?qū)ο笤O(shè)計是php程序開發(fā)中一個很重要的內(nèi)容塊,如果你想成為高級php程序員我們必須知道面向?qū)ο笤O(shè)計具體用法與寫法。
維護簡單 模塊化是面向?qū)ο缶幊讨械囊粋€特征。實體被表示為類和同一名字空間中具有相同功能的類,我們可以在名字空間中添加一個類而不會影響該名字空間的其他成員。
可擴充性 面向?qū)ο缶幊虖谋举|(zhì)上支持擴充性。如果有一個具有某種功能的類,就可以很快地擴充這個類,創(chuàng)建一個具有擴充的功能的類。
代碼重用 由于功能是被封裝在類中的,并且類是作為一個獨立實體而存在的,提供一個類庫就非常簡單了。
它比較適合多人合作來開發(fā)項目,所以現(xiàn)在很多大中型網(wǎng)站都選擇了用OOP來開發(fā)。
本文主要講解了用php做面向?qū)ο缶幊痰淖罨镜姆椒ê痛a實例,如何創(chuàng)建一個class和如何生成一個class的實例等等,只是一個入門,非常的簡單,要想深學這點是遠遠不夠的。只適合php的初學者
public 表示全局,類內(nèi)部外部子類都可以訪問;
代碼如下
復制代碼
private表示私有的,只有本類內(nèi)部可以使用;
代碼如下
復制代碼
protected表示受保護的,只有本類或子類或父類中可以訪問;
- 數(shù)據(jù)抽象和信息隱藏
- 繼承
- 多態(tài)性
在PHP中使用類進行封裝的辦法:
代碼如下
復制代碼
class Something {
// In OOP classes are usually named starting with a cap letter.
var $x;
function setX($v) {
// Methods start in lowercase then use lowercase to seprate
// words in the method name example getValueOfArea()
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
當然你可以用你自己的辦法,但有一個標準總是好的。
PHP中類的數(shù)據(jù)成員使用 "var" 定義,數(shù)據(jù)成員是沒有類型直到被賦值。一個數(shù)據(jù)成員可能是一個 integer、數(shù)組、聯(lián)合數(shù)組(associative array)或甚至對象(object). 方法在類里定義成函數(shù),在方法里存取數(shù)據(jù)成員,你必須使用$this->name 這樣的辦法,否則對方法來說是一個函數(shù)的局部變量。
使用 new 來創(chuàng)建一個對象
代碼如下
復制代碼
$obj = new Something;
然后使用成員函數(shù)
代碼如下
復制代碼
$obj->setX(5);
$see = $obj->getX();
setX 成員函數(shù)將 5 賦給對象(而不是類)obj 中成員變量, 然后 getX 返回值 5.
你也可以用對象引用來存取成員變量,例如:$obj->x=6; 然而,這不一種好的面向?qū)ο缶幊痰姆椒āN覉猿帜銘褂贸蓡T函數(shù)來設(shè)置成員變量的值和通過成員函數(shù)來讀取成員變量。如果你認為成員變量是不可存取的除了使用成員函數(shù)的辦法,你將成為一個好的面向?qū)ο蟪绦騿T。 但不幸的是PHP本身沒有辦法聲明一個變量是私有的,所以允許糟糕的代碼存在。
在 PHP 中繼承使用 extend 來聲明。
代碼如下
復制代碼
class Another extends Something {
var $y;
function setY($v) {
// Methods start in lowercase then use lowercase to seperate
// words in the method name example getValueOfArea()
$this->y=$v;
}
function getY() {
return $this->y;
}
}
?>
這樣類 "Another" 的對象擁有父類的所用成員變量及方法函數(shù),再加上自己的成員變量及成員函數(shù)。如:
代碼如下
復制代碼
$obj2=new Another;
$obj2->setX(6);
$obj2->setY(7);
多重繼承不被支持,所以你不能讓一個類繼承多個類。
在繼承類中你可以重新定義來重定義方法,如果我們在 "Another" 重新定義 getX,那么我們不再能存取 "Something" 中的成員函數(shù) getX. 同樣,如果我們在繼承類中聲明一個和父類同名的成員變量,那么繼承類的變量將隱藏父類的同名變量。
你可以定義一個類的構(gòu)造函數(shù), 構(gòu)造函數(shù)是和類同名的成員函數(shù),在你創(chuàng)建類的對象時被調(diào)用。
代碼如下
復制代碼
class Something {
var $x;
function Something($y) {
$this->x=$y;
}
function setX($v) {
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
所以可以用如下方法創(chuàng)建對象:
代碼如下
復制代碼
$obj=new Something(6);
構(gòu)造函數(shù)自動賦值 5 給成員變量 x, 構(gòu)造函數(shù)和成員函數(shù)都是普通的PHP函數(shù),所以你可以使用缺省參數(shù)。
代碼如下
復制代碼
function Something($x="3",$y="5")
然后:
代碼如下
復制代碼
$obj=new Something(); // x=3 and y=5
$obj=new Something(8); // x=8 and y=5
$obj=new Something(8,9); // x=8 and y=9
缺省參數(shù)的定義方法和 C++ 一樣,因此你不能傳一個值給 Y 但讓 X 取缺省值,實參的傳遞是從左到右,當沒有更多的實參時函數(shù)將使用缺省參數(shù)。
只有當繼承類的構(gòu)造函數(shù)被調(diào)用后,繼承類的對象才被創(chuàng)建,父類的構(gòu)造函數(shù)沒有被調(diào)用,這是PHP不同其他面向?qū)ο笳Z言的特點,因為構(gòu)造函數(shù)調(diào)用鏈是面向?qū)ο缶幊痰奶攸c。如果你想調(diào)用基類的構(gòu)造函數(shù),你不得不在繼承類的構(gòu)造函數(shù)中顯式調(diào)用它。這樣它能工作是因為在繼承類中父類的方法全部可用。
代碼如下
復制代碼
function Another() {
$this->y=5;
$this->Something(); //explicit call to base class constructor.
}
?>
多態(tài)性。
代碼如下
復制代碼
function niceDrawing($x) {
//Supose this is a method of the class Board.
$x->draw();
}
$obj=new Circle(3,187);
$obj2=new Rectangle(4,5);
$board->niceDrawing($obj); //will call the draw method of Circle.
$board->niceDrawing($obj2); //will call the draw method of Rectangle.
?>
和封裝有關(guān)的魔術(shù)方法:
__set():是直接設(shè)置私有成員屬性值時,自動調(diào)用的方法
__get():是直接獲取私有成員屬性值時,自動調(diào)用的方法
__isset(); 是直接isset查看對象中私有屬性是否存時自動調(diào)用這個方法
__unset(); 是直接unset刪除對象中私有屬性時,自動調(diào)用的方法
http://www.bkjia.com/PHPjc/372033.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/372033.htmlTechArticle面向?qū)ο笤O(shè)計是php程序開發(fā)中一個很重要的內(nèi)容塊,如果你想成為高級php程序員我們必須知道面向?qū)ο笤O(shè)計具體用法與寫法。 維護簡單 模...
總結(jié)
以上是生活随笔為你收集整理的php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么修改空间权限(怎么修改空间权限设置)
- 下一篇: oracle clob 查询换行,sqo