|
對(duì)象的行為:可以對(duì) 對(duì)象施加那些操作,開(kāi)燈,關(guān)燈就是行為。
對(duì)象的形態(tài):當(dāng)施加那些方法是對(duì)象如何響應(yīng),顏色,尺寸,外型。
對(duì)象的表示:對(duì)象的表示就相當(dāng)于身份證,具體區(qū)分在相同的行為與狀態(tài)下有什么不同。
面向?qū)ο竽P?/STRONG>
面向?qū)ο蟮母拍睿?
oop(面向?qū)ο蟮木幊?它能是其代碼更加簡(jiǎn)潔易于維護(hù)并且具有更強(qiáng)的可重性
什么是類:
類是具有相同屬性和服務(wù)的一組對(duì)象的集合比如說(shuō)人,書(shū),輪船,車都屬于類,他為屬于該類的對(duì)象做了一個(gè)統(tǒng)一的抽象描述,在編程的語(yǔ)言中類是一個(gè)單獨(dú)的程序,它應(yīng)該有一個(gè)類名包括屬性的說(shuō)明和服務(wù)兩個(gè)部分。
什么是對(duì)象:
對(duì)象是系統(tǒng)中描述客觀事件的一個(gè)實(shí)體,他是構(gòu)成系統(tǒng)的一個(gè)基本單位。*數(shù)據(jù)與代碼都被捆綁在一個(gè)實(shí)體當(dāng)中*,一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的一組行為組成。
從抽象的角度來(lái)說(shuō),對(duì)象是問(wèn)題域或?qū)崿F(xiàn)域中某些事物的一個(gè)抽象。他反映該事物在系統(tǒng)中保存的信息和發(fā)揮的作用:它是一組屬性和有權(quán)對(duì)這些屬性進(jìn)行操作的一個(gè)封裝體。客觀世界是由對(duì)象和對(duì)象之間的聯(lián)系組成的。
類和對(duì)象的關(guān)系:
類與對(duì)象的關(guān)系就如模具和鑄件的關(guān)系,類的實(shí)力化的結(jié)果就是對(duì)象,而對(duì)對(duì)象的抽象就是類,類描述了一組有相同特性(屬性)和相同行為的對(duì)象。
類與屬性和方法
php中定義類語(yǔ)法格式:
復(fù)制代碼 代碼如下:
class classname [可選屬性]{
public $property [=value];… //用public聲明一個(gè)公共標(biāo)識(shí) 然后給予一個(gè)變量 變量也可以賦值
function functionname ( args ){ //類的方法里的成員函數(shù)
代碼} …
//類的方法(成員函數(shù))
}
生成對(duì)象(類的實(shí)例化): $對(duì)象名=new classname( );
使用對(duì)象的屬性
在一個(gè)類中,可以訪問(wèn)一個(gè)特殊指針$this當(dāng)在該類中通過(guò)一個(gè)操作設(shè)置或訪問(wèn)該變量時(shí),使用$this->name來(lái)引用.
對(duì)象的生成
定義好類后用一個(gè)new來(lái)聲明,由于對(duì)象資料的封裝特性,對(duì)象是無(wú)法由主程序區(qū)塊直接訪問(wèn)的須通過(guò)對(duì)象來(lái)調(diào)用類中所定義的屬性和行為函數(shù),間接地達(dá)成存取控制類中資料的目的。
對(duì)象和類的關(guān)系
對(duì)象和類的關(guān)系:
對(duì)象是實(shí)際存在的,占有動(dòng)態(tài)資源。
類是對(duì)象的藍(lán)圖,可能占有靜態(tài)資源。
對(duì)象屬性占有動(dòng)態(tài)資源
類(靜態(tài))屬性實(shí)際上是有類名字空間上的"全局變量"
性能考慮:
每個(gè)對(duì)象要單獨(dú)占用數(shù)據(jù)空間
增加的調(diào)用層次可能消耗執(zhí)行時(shí)間
方法的參數(shù)形式和傳遞方式
方法的參數(shù)可以是基本數(shù)據(jù)類型、數(shù)組和類對(duì)象。
基本數(shù)據(jù)類型:值參傳遞
數(shù)組:值參傳遞
類對(duì)象:引用傳遞
構(gòu)造函數(shù)
構(gòu)造函數(shù)是在類中起到初始化的作用
構(gòu)造函數(shù)的生成方法與其他函數(shù)一樣只是其名稱必須是__construct().
語(yǔ)法格式:
function __construct(參數(shù)){
。。。。。。。。
}
范例:
復(fù)制代碼 代碼如下:
class Person{
public $name;
public $sex;
public $age;
function __construct($name,$sex,$age){
echo "我是構(gòu)造函數(shù)<br>";
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
輸出結(jié)果:初始化
析構(gòu)函數(shù)
當(dāng)對(duì)象脫離其作用域時(shí)(例如對(duì)象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。應(yīng)在退出前在析構(gòu)函數(shù)中用釋放內(nèi)存。
析構(gòu)函數(shù)__destruct 析構(gòu)函數(shù)沒(méi)有任何參數(shù)
范例:
復(fù)制代碼 代碼如下:
class person{
function _ _destruct( )
{ echo "bye bye !"; }
}
$a=new person();
訪問(wèn)類型
public 公共的(公共修飾符) 類內(nèi)部與類外部都可以訪問(wèn)的
private 私有的(私有修飾符) 只能在類內(nèi)部訪問(wèn)
protected 受保護(hù)的(保護(hù)成員修飾符) 子類可以訪問(wèn) 類外部不可以訪問(wèn)
oop的三個(gè)重要特性
封裝,繼承,多態(tài)
封裝性:封裝性就是把對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的單位。
封裝一個(gè)類需要兩步 第一步是私有化一個(gè)類 第二步是用set和get 做出讀取賦值的操作
他的好處是:隱藏類的實(shí)現(xiàn)細(xì)節(jié),可以方便加入邏輯控制性,限制對(duì)屬性的不合理操作,便于修改增強(qiáng)代碼的可維護(hù)性。
__get與__set
一般說(shuō)把類私有話更符合現(xiàn)實(shí)的邏輯。
預(yù)定義兩種函數(shù)來(lái)進(jìn)行獲取與敷值操作。
__get 獲取值通常是域的值
__set 設(shè)置值通常是域的值
__call 調(diào)用一個(gè)對(duì)象中不存在的方法時(shí),就會(huì)產(chǎn)生錯(cuò)誤call()這個(gè)方法來(lái)處理這種情況。
靜態(tài)屬性和方法
static關(guān)鍵字 來(lái)聲明靜態(tài)方法
static靜態(tài)變量 在類的內(nèi)部生成一個(gè)靜態(tài)變量 就是能夠被所有類的實(shí)力化共想 也就是說(shuō)靜態(tài)成員則放到了"初始化靜態(tài)段",在類第一次被加載的時(shí)候放入的,可以讓堆內(nèi)存里面的每個(gè)對(duì)象所共享
使用方法:self::$靜態(tài)屬性、self::靜態(tài)方法
static function p(){
echo self::$country;
echo self::PI;//訪問(wèn)常量
//echo $this->name;在靜態(tài)方法中只能操作靜態(tài)屬性
//self::p();
}
外部調(diào)用:類::$靜態(tài)屬性、類::靜態(tài)方法
const關(guān)鍵字:用來(lái)生成常量 常量是唯一的不能改變的 慣例常量為大寫(xiě)
const CONSTANT = 'constant value'; 生成一個(gè)常量
echo self::CONSTANT;//類內(nèi)部訪問(wèn)
echo ClassName::CONSTANT;//類外部訪問(wèn)
繼承性
B類的對(duì)象擁有A類的全部屬性與行為,稱作B對(duì)A類的繼承。
假如一個(gè)類從多個(gè)類中繼承了屬性與服務(wù),這稱為多繼承,通常我們成為繼承類為子類被繼承類為父類,在php中只有單繼承,但一個(gè)父類可以被多個(gè)類繼承,但是一個(gè)子類只能有一個(gè)父類,但是允許關(guān)聯(lián)繼承,通過(guò)繼承可以減化類的定義。
extende聲明繼承關(guān)系
語(yǔ)法格式:class B extends A 此范例指明 B繼承了A
類的外部訪問(wèn)對(duì)子類是有效的
子類與父類的屬性與方法
子類繼承父類的所有內(nèi)容,但父類中的private部分不能直接訪問(wèn)
子類中新增加的屬性和方法是對(duì)父類的擴(kuò)展
子類中定義的與父類同名的屬性是對(duì)父類屬性的覆蓋,同名的方法也是對(duì)父類方法的覆蓋
重寫(xiě)的方法
在子類中,使用parent訪問(wèn)父類中的被覆蓋的屬性和方法
parent::__construce();
parent::$name;
parent::fun();
覆蓋父類原有屬性
clone克窿對(duì)象 語(yǔ)法格式$c=clone $p; $c克窿的對(duì)象$p 輸出echo $c->name;
對(duì)象比較
===兩個(gè)比較運(yùn)算符。
==是比較兩個(gè)對(duì)象的內(nèi)容。
===是比較對(duì)象的句柄,即引用地址。
instanceof操作符用于檢測(cè)對(duì)象實(shí)力是否屬于某一個(gè)類的類型 屬于返回true 不屬于返回false
__clone()如果想在克隆后改變?cè)瓕?duì)象的內(nèi)容,需要在__clone()中重寫(xiě)原本的屬性和方法
function __clone(){
$this->name="我是一個(gè)克隆人";
}
final表示一個(gè)類是最終版本 也就是說(shuō)它不能在被子類調(diào)用
多態(tài)性
多態(tài)性是指在父類中定義的屬性或行為被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在父類及其各個(gè)子類中具有不同的語(yǔ)義。
就是說(shuō)同一種方法在子類與父類中執(zhí)行的結(jié)果不同。
復(fù)制代碼 代碼如下:
class A {
function info(){
echo "A INFO";
}
}
class B extends A {
function info(){
echo "B INFO";
}
}
class C extends A {
function info(){
echo "C INFO";
}
}
function printinfo($obj){
function printinfo(A $obj){
if($obj instanceof A)
$obj->info();
$obj->info();
}
}
$a=new A(); $b=new B(); $c=new C();
printinfo($a); //輸出A INFO
printinfo($b); //輸出B INFO
printinfo($c); //輸出C INFO
抽象方法和抽象類
抽象方法是作為子類摸版使用的。
復(fù)制代碼 代碼如下:
abstract class Person{
public $name;
abstract function getInfo();
}
抽象類不能被實(shí)力話,一個(gè)抽象類中,必須有一個(gè)抽象方法。但是抽象類中可以定義動(dòng)態(tài)函數(shù)。
接口
當(dāng)一個(gè)類繼承了一個(gè)接口之后,它要覆蓋接口的所有方法,接口只能聲明常量,接口的方法必須定義為共有否則無(wú)法繼承,接口可以與多個(gè)接口間繼承
語(yǔ)法:
復(fù)制代碼 代碼如下:
interface PCI{
const TYPE="PCI";
//public $name; error
function start();
function stop();
}
接口中的方法可以聲明為static
復(fù)制代碼 代碼如下:
interface A{ function a();}
interface B{ function b();}
interface C extends A{ function c();}
class D implements B,C{
function a(){}
function b(){}
function c(){}
}
類
類的聲明:
復(fù)制代碼 代碼如下:
<?php
權(quán)限修飾符 class 類名{ //權(quán)限修士符號(hào):public,protected,private 或者省略3者.
//類體; //class 是建類關(guān)鍵字
} //類名必須跟在class 后面,且跟上{}.{}之間放類的成員.
?>
//ps:在class關(guān)鍵字前可以加權(quán)限修飾符外,還可以加static,abstract等關(guān)鍵字.一個(gè)類,即一對(duì)大括號(hào)之間的全部?jī)?nèi)容都要在一段代碼段中,不允許將類中的內(nèi)容分割成對(duì)塊.
<?php
class ConnDB{
//....
?>
<?
//...
};
?>
成員屬性:
在類中直接聲明的變量稱為成員屬性/變量.其類型可以為php中的標(biāo)量類型和復(fù)合類型,使用資源類型和空類型是無(wú)效的.
此外,成員屬性的聲明時(shí),必須要有關(guān)鍵字來(lái)修飾:有特定意義的關(guān)鍵字:public,protected,private ;不需要特定意義:var.聲明成員屬性時(shí),沒(méi)有必要賦初始值.
成員常量:
以const常量修飾,例如:const PI = 3.1415926;
常量的輸出不需要實(shí)例化,直接由類名+常量名調(diào)用即可,格式為: 類名::常量名
ps. 特殊的訪問(wèn)方法:--------"$this" 和 "::"
1) $"this" 存在于每個(gè)成員方法當(dāng)中,它是一個(gè)特殊的對(duì)象以用方法.成員方法屬于那個(gè)對(duì)象,$this應(yīng)用就代表那個(gè)對(duì)象,其作用就是專門(mén)完成對(duì)象內(nèi)部成員之間的訪問(wèn).
2) "::"成為作用域操作符,使用這個(gè)操作符可以在不創(chuàng)建對(duì)象的情況下調(diào)用類中的常量,變量和方法. 其語(yǔ)法格式如下:
關(guān)鍵字::變量名/常量名/方法名
關(guān)鍵字:parent,可以調(diào)用父類成員中的成員變量,成員方法和常量;
self,可以調(diào)用當(dāng)前類中的靜態(tài)成員和常量;
類名,可以調(diào)用類中的常量,變量和方法;
成員方法:
在類中聲明的函數(shù)成為成員方法,在一個(gè)類中可以聲明多個(gè)函數(shù),即對(duì)象可以擁有多個(gè)成員方法.成員方法的聲明和函數(shù)的聲明相同,唯一特殊之處就是成員方法可以有關(guān)鍵字對(duì)它進(jìn)行修飾,從而控制其訪問(wèn)權(quán)限.
類的實(shí)例化
創(chuàng)建對(duì)象:
$變量名 = new 類名稱([參數(shù)]); //類的實(shí)例化.
訪問(wèn)類成員:
$變量名 -> 成員屬性 = 值;
構(gòu)造方法和析構(gòu)方法
構(gòu)造方法是對(duì)象創(chuàng)建完成后第一個(gè)唄對(duì)象自動(dòng)調(diào)用的方法.它存在每個(gè)類的聲明當(dāng)中,是一個(gè)特殊的成員方法,一般用來(lái)完成一些初始化操作.如果類中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)默認(rèn)自動(dòng)生成一個(gè)沒(méi)有參數(shù)的構(gòu)造方法.
格式:
復(fù)制代碼 代碼如下:
function _construct(形參列表){
//方法體
};
析構(gòu)方法則如構(gòu)造方法相反,它是在對(duì)象被銷毀前最后一個(gè)調(diào)用的方法.它將完成一個(gè)特定的操作,如關(guān)閉文件和釋放內(nèi)存.
格式:
復(fù)制代碼 代碼如下:
function _destruct(){
//方法體
};
面向?qū)ο筇攸c(diǎn):封裝性,抽象性,多態(tài)性.
封裝:
將類中的成員屬性和方法結(jié)合成一個(gè)獨(dú)立的相同單位,并且盡可能的隱藏對(duì)象的內(nèi)容細(xì)節(jié).其目的是確保類以外的部分不能隨意存取類的內(nèi)部數(shù)據(jù)(成員屬性和成員方法),從而避免外部錯(cuò)誤對(duì)內(nèi)部數(shù)據(jù)的影響.
類的封裝是通過(guò)關(guān)鍵字public,private,protected,static和final實(shí)現(xiàn)的.各關(guān)鍵字的作用請(qǐng)查看php相關(guān)文檔.
繼承性:
使一個(gè)類繼承并擁有另一個(gè)已存在的類的成員屬性和成員方法,其中被繼承的類成為父類,繼承的類成為子類.通過(guò)繼承能夠提高代碼的重用性和可維護(hù)性.類的繼承用 extends 關(guān)鍵字.
格式:
復(fù)制代碼 代碼如下:
class 子類名稱 extends 父類名稱{
//子類方法體.
}
通過(guò)parent::關(guān)鍵字也可以在子類方法中調(diào)用父類的成員方法,格式如下:
parent::父類的成員方法(參數(shù));
覆蓋父類的方法:
所謂的覆蓋父類的方法,也就是使用子類中的方法替換從父類中繼承的方法,也叫方法的重寫(xiě).重寫(xiě)的關(guān)鍵就在與子類中創(chuàng)建與父類中相同的方法,g包括方法名稱,參數(shù)和返回類型.
多態(tài)性:
多態(tài)性是指一段程序能夠處理多種類型對(duì)象的能力.php多態(tài)有兩種實(shí)現(xiàn)方法,即通過(guò)繼承實(shí)現(xiàn)多態(tài)和通過(guò)接口實(shí)現(xiàn)多態(tài).
通過(guò)繼承實(shí)現(xiàn)多態(tài),即通過(guò)重寫(xiě)繼承的成員方法來(lái)達(dá)到多態(tài)的效果.
復(fù)制代碼 代碼如下:
<?php
abstract class ParentClass{
abstract function printMessage();
}
class SubClassA extends ParentClass{
function printMessage(){
echo "i am message from class A";
}
}
class SubClassB extends ParentClass{
function printMessage(){
echo "i am message from class B";
}
}
function printMSG($object){
if( $object instanceof ParentClass){
$object->printMessage();
}else{
echo "error!";
}
}
$objectA=new SubClassA();
printMSG($objectA);
$objectB=new SubClassB();
printMSG($objectB);
?>
通過(guò)接口實(shí)現(xiàn)多態(tài),通過(guò)定義接口,與空方法.然后類繼承接口.
復(fù)制代碼 代碼如下:
<?php
interface interfaceInfo{
function printMessage();
}
class ClassA implements interfaceInfo{
function printMessage(){
echo "message form class A";
}
}
class ClassB implements interfaceInfo{
function printMessage(){
echo "message form class B";
}
}
function printMSG($object){
if($object instanceof interfaceInfo){
$object -> printMessage();
}else{
echo "error !";
}
}
$objectA =new ClassA();
printMSG($objectA);
$objectB =new ClassB();
printMSG($objectB);
?>
ps. 抽象類和接口.
抽象類和接口都是不能被實(shí)例化的特殊類.他們都是能夠配合面向?qū)ο蠖鄳B(tài)性一起使用.
抽象類:
抽象類是一種不能實(shí)例化的類,只能作為其他類的父類來(lái)使用.抽象類使用abstract 關(guān)鍵字來(lái)聲明,其格式如下:
復(fù)制代碼 代碼如下:
abstract class 抽象類名{
abstract function 成員方法(參數(shù));//
}
抽象類和普通類相似,包含成員變量,成員方法.兩者區(qū)別在于抽象類至少要包含一個(gè)抽象方法.抽象方法沒(méi)有方法體,其功能的實(shí)現(xiàn)只能在子類中完成.抽象方法也使用關(guān)鍵字 abstract 來(lái)修飾.
接口:
繼承特性簡(jiǎn)化了對(duì)象和類的創(chuàng)建,增強(qiáng)了代碼的可重用性.但php只支持單繼承,如果想實(shí)現(xiàn)多重繼承,就要使用接口.
接口的聲明:通過(guò)interface 關(guān)鍵字來(lái)實(shí)現(xiàn),接口中聲明的方法必須是抽象方法,接口中不能聲明變量,只能使用const 關(guān)鍵字聲明為常量的成員屬性,并且接口中所有成員都必須具備puclic 的訪問(wèn)權(quán)限.ainterface 聲明接口格式如下:
復(fù)制代碼 代碼如下:
inerface 接口名稱{
//常量成員;//成員只能是常量.
//抽象方法;
}
由于接口不能實(shí)現(xiàn)實(shí)例化操作,因此只能借助子類繼承接口的形式來(lái)實(shí)現(xiàn).實(shí)現(xiàn)的格式是:
復(fù)制代碼 代碼如下:
Class 子類名 implements 接口名1[,接口名2,接口名3,.....]{
//子類方法體.
}
常用關(guān)鍵字:
1) final:final之意為最終的,最后的.這就以為著通過(guò)final 關(guān)鍵字修飾的類和方法都為最終版本.不能被繼承,也不能有子類.不能重寫(xiě),也不能被覆蓋.
2) static: 通過(guò)static 關(guān)鍵字修飾的成員屬性和成員方法稱為靜態(tài)屬性和靜態(tài)方法.靜態(tài)成員屬性和方法不需要被實(shí)例化就能直接使用.
靜態(tài)屬性:它屬于類本身,而不屬于類的任何實(shí)例.它相當(dāng)于存儲(chǔ)在類中的全局變量,可以在任何位置通過(guò)類來(lái)訪問(wèn).訪問(wèn)格式為:
類名稱::$靜態(tài)屬性名稱;
如果你要在類內(nèi)部的成員方法中訪問(wèn)靜態(tài)屬性,那么在靜態(tài)屬性的名稱前加上操作符: "self::" 即可.
靜態(tài)方法:由于其不受任何對(duì)象限制,因此可以不通過(guò)類的實(shí)例化而直接引用類中的靜態(tài)方法.引用格式如下:
類名稱::靜態(tài)方法名(參數(shù));
如果你要在類內(nèi)部的成員方法中調(diào)用靜態(tài)方法,那么在靜態(tài)方法的名稱前加上操作符: "self::" 即可.在靜態(tài)方法中只能調(diào)用靜態(tài)變量,而不能調(diào)用普通變量;而普通方法中則可以調(diào)用靜態(tài)變量.
使用靜態(tài)成員除了不需要實(shí)例化外,另一個(gè)作用是在對(duì)象被銷毀后,仍然保留唄修改的靜態(tài)數(shù)據(jù),以便下次調(diào)用.
3) clone.對(duì)象的克隆可以通過(guò)關(guān)鍵字來(lái)實(shí)現(xiàn).使用clone對(duì)象與原對(duì)象沒(méi)有任何關(guān)系,即克隆對(duì)象會(huì)重新申請(qǐng)一份存儲(chǔ)空間來(lái)存放原對(duì)象內(nèi)容.格式如下:
$克隆對(duì)象 = clone $原克隆對(duì)象名稱;
克隆成功后,他們的n成員方法,屬性以及值完全相等.如果要對(duì)副本重新初始化,就要用到 _clone().
魔術(shù)方法_clone()可以對(duì)克隆后的副本對(duì)象重新初始化.它不需要任何參數(shù),其中自動(dòng)包含$this (副本對(duì)象)和 $that (原對(duì)象) 對(duì)象的引用.
對(duì)象的比較:
"==" 表示比較兩個(gè)對(duì)象的內(nèi)容,"==="表示比較兩個(gè)對(duì)象的引用地址相等.
對(duì)象類型的檢測(cè): instanceof 操作符可以檢測(cè)當(dāng)前對(duì)象屬于那個(gè)對(duì)象.
面向?qū)ο?--常用魔術(shù)方法:
以上我們已經(jīng)了解的常用魔術(shù)方法有:_construct(),_destruct(),_clone.下面我們?cè)俳又榻B幾個(gè)常用魔術(shù)方法.
_get(),_set();
以上兩個(gè)方法用于對(duì)私有成員精細(xì)復(fù)制或者獲取值的操作.
_set()在程序運(yùn)行中為私有的成員屬性設(shè)置值,它不需要任何返回值._set()方法包括兩個(gè)不可省略的參數(shù):變量名和變量值.這個(gè)方法不需要主動(dòng)調(diào)用,可在方法錢加上prive關(guān)鍵字.
_get():在程序運(yùn)行中,在對(duì)象的外部獲取私有成員的屬性的值.他有一個(gè)參數(shù):私有成員屬性名稱.他返回一個(gè)允許對(duì)象在外部使用的值.此方法同樣不許主動(dòng)調(diào)用.
_isset(),_unset():
isset()函數(shù)用于檢測(cè)變量是否存在.而在面向?qū)ο笾锌梢酝ㄟ^(guò)isset()函數(shù)對(duì)公有的成員屬性進(jìn)行檢測(cè),但對(duì)私有成員屬性,此函數(shù)則不起作用.因此,_isset()函數(shù)正是為了起到此作用而創(chuàng)建.格式如下:
bool _isset(string name);
_unset()則同樣為了刪除制定的變量和對(duì)象的私有成員屬性.格式如下:
void _unset(string name);//
_call():
_call()方法的作用是當(dāng)程序試圖調(diào)用不存在或不可見(jiàn)的成員方法時(shí),php會(huì)先調(diào)用_call()方法來(lái)存儲(chǔ)方法名及其參數(shù)(方法名和方法參數(shù)).其中方法參數(shù)是以數(shù)組的形式存在.
_toString()方法:
其作用是當(dāng)使用echo 或者print輸出對(duì)象時(shí),將對(duì)象轉(zhuǎn)化為字符串.
如果沒(méi)有_toString()方法,直接輸出對(duì)象時(shí)將會(huì)發(fā)生致命錯(cuò)誤.
輸出對(duì)象時(shí)應(yīng)注意的是,echo 或print 語(yǔ)句后面直接跟要輸出的對(duì)象,中間不要加多余的字符,否則_toSting()將不會(huì)被執(zhí)行.
_autoload()方法:
將一個(gè)獨(dú)立的,完整的類保存到一個(gè)php頁(yè)中,并且文件名和類名保持一致,這是每個(gè)開(kāi)發(fā)人員都需要養(yǎng)成的良好習(xí)慣.這樣下次在使用的時(shí)候就能夠輕松的找到它.但有一種情況:如果要在一個(gè)頁(yè)面中引進(jìn)很多的類,就需要使用include_once()函數(shù)或者require_once()函數(shù)一個(gè)個(gè)地引入.php5中引入_autoload()方法可以自動(dòng)實(shí)例化需要使用的類.當(dāng)一個(gè)類還沒(méi)實(shí)例化時(shí),_autoload()會(huì)自動(dòng)到指定的路徑下面自動(dòng)查找和類名相同的文件.找到則繼續(xù)執(zhí)行,否則報(bào)錯(cuò).
復(fù)制代碼 代碼如下:
<?php
function _autoload($class_name){
$class_path = $class_name.'.class.php';
if(file_exists($class_path)){
include_once($class_path);
}else{
echo '類不存在或者類路徑錯(cuò)誤';
}
}
$class = new Class(); //將會(huì)自動(dòng)加載.
echo $class; //輸出類內(nèi)容.如自定義了_toString()方法;則會(huì)輸出_toString()中定義的內(nèi)容.
?>
php技術(shù):PHP 面向?qū)ο笤斀?/a>,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。