日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php的封装继承多态,PHP面向对象深入理解之二(封装、继承、多态、克隆)

發(fā)布時(shí)間:2025/4/5 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php的封装继承多态,PHP面向对象深入理解之二(封装、继承、多态、克隆) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.封裝

所謂封裝就是隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),提供外部訪問(wèn)方式

將一系列私有的特征保存起來(lái)

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è)接口 解決單繼承問(wèn)題

*/

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ì)象賦值給父類類型

來(lái)看一個(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)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。