一般來說,學習PHP需要了解下面的一些特性:
對象克隆。PHP5中對OOP模型的主要改進之一,是將所有對象都看作引用,而不是值。但是,如果所有對象都視為引用,那麼如何創建對象的副本呢?答案是通過克隆對象。
<?php
class Corporate_Drone{
private $employeeid;
private $tiecolor;
function setEmployeeID($employeeid) {
$this->employeeid = $employeeid;
}
function getEmployeeID() {
return $this->employeeid;
}
function setTiecolor($tiecolor) {
$this->tiecolor = $tiecolor;
}
function getTiecolor() {
return $this->tiecolor;
}
}
$drone1 = new Corporate_Drone();
$drone1->setEmployeeID("12345");
$drone1->setTiecolor("red");
$drone2 = clone $drone1;
$drone2->setEmployeeID("67890");
printf("drone1 employeeID:%d <br />",$drone1->getEmployeeID());
printf("drone1 tie color:%s <br />",$drone1->getTiecolor());
printf("drone2 employeeID:%d <br />",$drone2->getEmployeeID());
printf("drone2 tie color:%s <br />",$drone2->getTiecolor());
?>
繼承。如前面所述,通過繼承來構建類層次體系是OOP的關鍵概念。
class Employee {
...
}
class Executive extends Employee{
...
}
class CEO extends Executive{
...
}
接口。接口是一些未實現的方法定義和常量的集合,相當於一種類藍本。接口只定義了類能做什麼,而不涉及實現的細節。本章介紹PHP5對接口的支持,並提供了一些展示這個強大OOP特性的例子。
<?php
interface IPillage
{
// CONST 1;
function emptyBankAccount();
function burnDocuments();
}
class Employee {
}
class Excutive extends Employee implements IPillage {
private $totalStockOptions;
function emptyBankAccount() {
echo "Call CFO and ask to transfer funds to Swiss bank account";
}
function burnDocuments() {
echo "Torch the office suite.";
}
}
class test {
function testIP(IPillage $ib) {
echo $ib->emptyBankAccount();
}
}
$excutive = new Excutive();
$test = new test();
echo $test->testIP($excutive);
?>
抽象類。抽象類實質上就是無法實例化的類。抽象類將由可實例化的類繼承,後者稱為具體類(concreate class)。抽象類可以完全實現、部分實現或者根本未實現。
abstract class Class_name
{
//insert attribute definitions here
//insert method definitions here
}
命名空間。命名空間可根據上下文劃分各種庫和類,幫肋你更為有效地管理代碼庫。
<?php
namespace Library;
class Clean {
function printClean() {
echo "Clean...";
}
}
?>
<?php
include "test.php";
$clean = new \Library\Clean();
$clean->printClean();
?>
如果你使用過其他面向對象語言,可能會感到奇怪,為什麼上述特性沒有包括其他語言中熟悉的一些OOP特性?原因很簡單,PHP不支持這些特性。為了讓你不再感到迷惑,下面列出PHP不支持的高級OOP特性。