面向對象設計是php程序開發中一個很重要的內容塊,如果你想成為高級php程序員我們必須知道面向對象設計具體用法與寫法。
維護簡單 模塊化是面向對象編程中的一個特征。實體被表示為類和同一名字空間中具有相同功能的類,我們可以在名字空間中添加一個類而不會影響該名字空間的其他成員。
可擴充性 面向對象編程從本質上支持擴充性。如果有一個具有某種功能的類,就可以很快地擴充這個類,創建一個具有擴充的功能的類。
代碼重用 由於功能是被封裝在類中的,並且類是作為一個獨立實體而存在的,提供一個類庫就非常簡單了。
它比較適合多人合作來開發項目,所以現在很多大中型網站都選擇了用OOP來開發。
本文主要講解了用php做面向對象編程的最基本的方法和代碼實例,如何創建一個class和如何生成一個class的實例等等,只是一個入門,非常的簡單,要想深學這點是遠遠不夠的。只適合php的初學者
public 表示全局,類內部外部子類都可以訪問;
代碼如下 復制代碼 <?phpprivate表示私有的,只有本類內部可以使用;
代碼如下 復制代碼
<?php
class Test{
private $name='Janking',
$sex='male',
$age=23;
function __construct(){
$this->funcOne();
}
function func(){
echo $this->age.'<br />'.$this->name.'<br />'.$this->sex.'<br />';
}
private function funcOne(){
echo $this->age.'<br />'.$this->name.'<br />'.$this->sex.'<br />';
}
}
$P=new Test();
echo '<br /><br />';
$P->func();
$P->age=100; // Cannot access private property Test::$age
$P->name="Rainy"; // Cannot access private property Test::$name
$P->sex="female"; // Cannot access private property Test::$female
$P->funcOne(); // Call to private method Test::funcOne() from context ''
?>
protected表示受保護的,只有本類或子類或父類中可以訪問;
- 數據抽象和信息隱藏
- 繼承
- 多態性
在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中類的數據成員使用 "var" 定義,數據成員是沒有類型直到被賦值。一個數據成員可能是一個 integer、數組、聯合數組(associative array)或甚至對象(object). 方法在類裡定義成函數,在方法裡存取數據成員,你必須使用$this->name 這樣的辦法,否則對方法來說是一個函數的局部變量。
使用 new 來創建一個對象
代碼如下 復制代碼$obj = new Something;
然後使用成員函數
代碼如下 復制代碼$obj->setX(5);
$see = $obj->getX();
setX 成員函數將 5 賦給對象(而不是類)obj 中成員變量, 然後 getX 返回值 5.
你也可以用對象引用來存取成員變量,例如:$obj->x=6; 然而,這不一種好的面向對象編程的方法。我堅持你應使用成員函數來設置成員變量的值和通過成員函數來讀取成員變量。如果你認為成員變量是不可存取的除了使用成員函數的辦法,你將成為一個好的面向對象程序員。 但不幸的是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" 的對象擁有父類的所用成員變量及方法函數,再加上自己的成員變量及成員函數。如:
代碼如下 復制代碼$obj2=new Another;
$obj2->setX(6);
$obj2->se