php的封装继承多态,PHP面向对象深入理解之二(封装、继承、多态、克隆)
1.封裝
所謂封裝就是隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),提供外部訪問方式
將一系列私有的特征保存起來
class Person
{
private $ID;
public function setID($id)
{
$this->ID = ($id + 1)*3;
}
public function getID()
{
return $this->ID;
}
}
$wang = new Person();
$wang->setID('123');
//我們不去關(guān)心id是如何生成的,我們只需要拿到我們想要的,這就是封裝
print $wang->getID();
2.繼承
繼承就是把父類的東西傳給下一代,就像中華文化一樣,代代相傳
注意:所有要被繼承的方法的方法名 不能和類名一樣 即使大小寫不同也不行
(1) 接口的繼承
接口自身也允許多繼承,但是父子之間方法不能同名
interface People
{
public function age();
}
interface Human
{
public function name();
}
interface Person extends Human,People
{
public function gender();
}
類與接口之間允許多繼承
interface A
{
public function a();
}
interface B
{
public function b();
}
/*
* 可以同時(shí)實(shí)例化多個(gè)接口 解決單繼承問題
*/
class E implements A,B
{
const E1 = '15'; //類中常量使用
static $e2 = 1; //類中靜態(tài)變量使用
public $e3 =2; //類中普通成員變量使用
public function __construct(){
self::$e2++;
}
public function a(){
echo 'E1:'.self::E1."\n";
}
public function b(){
echo 'e1:'.self::$e2."\n";
}
}
$e1 = new E();
$e1->a();
$e1->b();
$e2 = new E();
$e1->a();
$e1->b();
$e2->a();
(2) 抽象類/普通類的繼承
類只能實(shí)現(xiàn)單繼承
abstract class A
{
public function $aa=1;
abstract public function a1();
public function aa()
{
echo 'aa';
}
}
class A2
{
public function a1()
{
echo 'a1';
}
}
$a2 = new A2();
$a2->a1;
3. 多態(tài)
多態(tài),同一個(gè)實(shí)體同時(shí)具有多種形式,從PHP上講,就是允許將子類類型的對(duì)象賦值給父類類型
來看一個(gè)栗子:
abstract class Animal
{
abstract public function say();
}
class Cat extends Animal
{
public function say()
{
echo 'maio';
}
}
class Dog extends Animal
{
public function say()
{
echo 'wang';
}
}
function said($animal)
{
if($animal instanceof Animal){
$animal->say();
}
}
said(new Cat());
said(new Dog());
4. 克隆
為什么要把克隆放在這里。PHP5中有個(gè)非常重要的改變,使用new關(guān)鍵字
new出的對(duì)象是一個(gè)指向?qū)ο缶浔膇d,當(dāng)賦值給其他變量的時(shí)候,會(huì)有意想不到的結(jié)果
舉個(gè)栗子:
class A
{
public $aa = 2;
}
$a1 = new A();
$a2 = $a1;
$a3 = clone $a1;
$a1->aa = 5;
print $a2->aa,"\n";
print $a3->aa,"\n";
?>
結(jié)果是 3 5
為什么不是 3和3,這里的$a2獲得的只是$a1對(duì)象的句柄(id),并不是對(duì)象的完整拷貝,所以,如果要使用對(duì)象的完整拷貝,請(qǐng)使用clone,以免獲得意想不到的結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的php的封装继承多态,PHP面向对象深入理解之二(封装、继承、多态、克隆)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚕蛹是否可以食用?
- 下一篇: php 二维数组中去重,PHP实现二维数