物件導向(OOP)

2021-09-23 23:27:33 字數 4704 閱讀 2794

術語說明

類(class)

具有相同特徵和行為的物件

物件(obj)

具有特徵和行為的個體

特徵屬性,也就是變數

行為方法,也就是函式

/**

*例項:類的書寫格式以及例項化(建立物件)

*/class name

}#類的例項化,結果是物件

$obj= new name(); //返回物件

var_dump($obj);

使用特殊操作符」->」訪問物件的成員 ,物件裡面的所有的成員都要用物件來呼叫,包括物件的內部成員之間的呼叫,php 提供了乙個本物件的引用$this

外部訪問:

物件->成員

內部訪問:

$this->成員

/**

*例項:訪問物件中的成員(屬性和方法)

*/class human,性別:,歲";

}}#例項化物件

$xiaoming=new human();

#給屬性賦值

$xiaoming->name ='小明';

$xiaoming->***='男';

$xiaoming->age='23';

#訪問屬性

echo $xiaoming->name;

#訪問方法

$xiaoming->self();

不會在類中改變的值。使用關鍵字const宣告類的常量,注意不能在方法裡宣告,只能在方法內部訪問。

外部訪問:

類名或物件::常量名

內部訪問:

self::常量名

/**

* 例項:定義和訪問類常量

*/class classname

}$obj=new classname(); //例項化

$obj->abc(); //呼叫類的abc方法

echo $obj::name; //使用物件名外部呼叫

echo classname::name; //直接使用類名外部呼叫

使用static 關鍵字宣告屬性,也可以宣告方法,使用了靜態,有以下特點

外部訪問:

類名或物件::靜態屬性名或方法名

內部訪問:

self::靜態屬性名

/**

*例項:靜態屬性與方法的宣告和訪問

*/class classname

}$obj=new classname();

#訪問靜態屬性

echo $obj::$name; //例項化訪問

echo classname::$name; //不例項化訪問

#訪問靜態方法

echo $obj::abc(); //例項化訪問

echo classname::abc(); //例項化訪問

在類例項化後立即自動呼叫執行。一般初始化某些屬性,或執行某些方法的函式。

/**

*應用例項

*/class human

function self(),性別:,歲";

}}$xiaoming=new human('小明','男',16);

$xiaoming->self();

$xiaoqiang=new human('小強','男');

$xiaoqiang->self();

php5中引入了析構函式。在類銷毀之前自動執行,一般應用於重置、超出限制等場景。

/**

*應用例項

*思考: 為什麼小強比小明先消失?

*原因:與記憶體儲存有關,先宣告的後銷毀

*/class human

function self()

"; }

function __destruct()消失

"; }

}$xiaoming=new human('小明');

$xiaoming->self();

$xiaoqiang=new human('小強');

$xiaoqiang->self();

繼承是指在乙個類的基礎上再建立另乙個新的派生類,新的派生類成為子類,繼承了父類的所有類成員,並且可以重新定義或加進新的屬性和方法, 提高了**重用性。

/**

* 例項:定義 test 類,並繼承自 testparent 類

*/ class testa ";

}}class testb extends testa ';

}}#訪問、設定繼承父類的方法和屬性

$obj=new testb ();

$obj->testa1='屬性';

$obj->testbfun();

封裝是指使用修飾符對屬性和方法進行限制,盡可能隱蔽物件的內部細節。對外形成乙個邊界,只保留有限的對外介面使之與外部發生聯絡。類的封裝性具有以下優點

訪問修飾符是指允許開發人員對類成員的訪問進行限制,這是php5的新特性。

修飾符說明

作用域public

公共修飾符

沒有訪問限制

private

私有修飾符

只有本類沒有訪問限制,子類也無許可權訪問

protected

保護修飾符

只有本類、子類沒有訪問限制,被子類繼承的protected成員,在子類外部同樣不能被訪問

/**

* 例項:類的封裝,本例子的屬性需要逐個測試

*/ class testa

function testfun1()";

}}class testb extends testa ";

}}$obja=new testa('test1');

$obja->testfun1();

#訪問、設定繼承父類的方法和屬性

$objb=new testb('test1');

$objb->testfun();

多型性是指在父類的屬性或行為被子類繼承之後,可以具有不同的資料型別或表現出不同的行為。使用乙個函式封裝具有相同方法的物件,通過設定函式的引數約束。

class testa

function testa1()";

}}class testb extends testa ";

}}#使用同個函式封裝具有相同類成員的不同物件

function test($obj)

$obj=new testb('哈哈');

test($obj);

#可以增加父類或祖先類的約束(php使用少)

class testc

function testa1()";

}function testb1()";

}}function test(testa $obj)

$obj=new testb('哈哈'); //正確例項

/*$obj=new testc('哈哈');//錯誤例項*/

test($obj);

php5.3新加的特性,為了避免產生類名衝突而產生的。

/**

*例項:命名空間(待驗證)

*/#建立wengdo.php **如下:

namespace wengdo; //定義了乙個名字空間

function time()

const php_os='wengdo裡面的常量';

class test

}#建立tests.php **如下:

include('wengdo.php');

echo time(); //非限定名稱

echo "

";echo wengdo\time(); //限定名稱

echo "

";echo \wengdo\time(); //完全限定名稱

$p1=new wengdo\test();

use wengdo as hehe; //使用別名

$p1=new hehe\test();

通常乙個類都以有規律的命名儲存為乙個php檔案,當php檔案中需要呼叫乙個類時,通過include把這個檔案引入。當需要引入多個類檔案時,很繁瑣,php5提供了乙個__autoload()來解決這個問題。

在組織定義類的檔名時,需要按照一定的規則,檔名與類名保持一致,加上統一的字首或字尾形成檔名,如:

/**

*例項: 自動載入檔案class_name中的類(待驗證)

*/function __autoload($class_name)

#例項化物件時,如果類不存在,則呼叫__autoload()函式,其引數為類名

$db = new employee ();

oop物件導向

首先是定義 什麼是物件 物件就是屬性的無序集合,每個屬性存放乙個 原始值or物件or函式 既然是屬性的無序集合,那麼屬性的含義顧名思義,那麼屬性是什麼 屬性就是乙個個的鍵值對.也就是 屬性名 屬性 一分為二,首先是屬性名 什麼可以做屬性名,既然屬性的名字,所以我們一般是用字串來命名的,當然,如果自己...

OOP 物件導向

oop思想 接觸到任意乙個任務,首先想到的是這個人物的構成,是由模型構成的 幾個名詞 oo 物件導向 ooa 物件導向的分析 ood 物件導向的設計 ooi 物件導向的實現 oop 物件導向的程式設計 ooa ood ooi 物件導向的實現過程 類和物件的概念 類 抽象名詞,代表乙個集合,共性的事物...

物件導向 oop

物件導向的核心 類 物件 需要有意義的物件導向的 不是有了類就是物件導向 例項化的方法 設計層面 函式 程式運形,過程式一種稱謂 物件 物件是現實世界或者思維世界中的實體在計算機中的反映,它將資料以及這些資料上的操作封裝在一起 類 一類事物的統稱,物件是類具體化的產物,也就是例項化 不同的物件有什麼...