PHP類與物件

2021-10-01 07:14:23 字數 3761 閱讀 1619

php 5完全重寫了物件模型以得到更佳效能和更多特性,具有完整的物件模型。

php 對待物件的方式與引用和控制代碼相同,即每個變數都持有物件的引用,而不是整個物件的拷貝。

我們都知道php物件賦值預設情況下是通過引用傳遞的,但這並不完全正確。

比如:

classa$a

=newa(

);$b=

$a;//此時,$a,$b是同乙個識別符號的拷貝,即 ($a) = ($b) = $c=

&$a;//此時,$a,$b是引用 即 ($c,$d) =

function

foo(

$obj

)foo($a

);//此時傳遞$a 物件,是識別符號拷貝 ,即 // ($obj) = ($e) =

php是弱型別語言,向方法傳遞引數時候也不太區分型別。這樣的使用會引起很多的問題,php開發者認為,這些問題應該是由**書寫者在書寫**時進行檢驗以避免。

沒有型別提示很危險

下面的**可能會出現問題。

class

normaluser

public

function

getage()

}

$normaluser

=new

normaluser()

;$normaluser

->

setage

("i am ycp");

//這裡我們傳輸乙個非數值.

echo

"age is "

.$normaluser

->

getage()

;

//注意輸出結果不是我想要的型別.

?>

程式執行結果:

1age is i am ycp

原始型別的型別判斷

php中提供了一些函式,來判斷數值的型別。我們可使用is_numeric()。判斷是否是乙個數值或者可轉換為數值的字串。

其它相關的還有is_bool()、is_int()、is_float()、is_integer()、is_numeric()、is_string()、is_array() 和 is_object()

於是**有了修改:

<?

class

normaluser

public

function

getage()

}

$normaluser

=new

normaluser()

;$normaluser

->

setage

("i am tom");

//這裡我們傳輸乙個非數值.

echo

"age is "

.$normaluser

->

getage()

;//看到這裡的結果為空.

echo""

;$normaluser

->

setage

("100");

echo

"age is "

.$normaluser

->

getage()

;// 這裡就有了結果.

?>

程式執行結果:

1

age is

2age is 100

向方法內傳遞物件

如果傳遞的引數是乙個物件呢?下面的**用起來很正常。

<?

class

normaluser

public

function

getname()

}

class

useradmin

}$normaluser

=new

normaluser()

;useradmin:

:changename

($normaluser

,"tom");

echo

"username is "

.$normaluser

->

getname()

;?>

程式執行結果:

1

username is tom

我們還有乙個類,和圖書相關的類,在圖書類中也可以設定圖書的書名setname($name)。

如果我向,剛才**中的方法changename() 中傳入乙個book的例項,原定於改變人名的方法現在改變了書的書名。

這有什麼風險?能把髒衣服扔到洗衣機裡面去洗,同樣的清洗,把盤子和碗都扔進洗衣機裡面洗洗試試。

下面的**演示我們不想看到的一幕。

<?

class

normaluser

public

function

getname()

}

class

book

public

function

getname()

}

class

useradmin

}$book

=new

book()

;useradmin:

:changename

($book

,"tom");

echo

"bookname is "

.$book

->

getname()

;?>

程式執行結果:

1

bookname is tom

型別提示保障資料安全

為了避免物件型別不規範引起的問題,php5中引入了型別提示這個概念。

在定義方法引數時,同時定義引數的物件型別。

如果在呼叫的時候,傳入引數的型別不對會報錯。這樣保證了資料的安全性。

<?

class

normaluser

public

function

getname()

}

class

useradmin

}useradmin:

:changename

("anytype"

,"tom");

?>

程式執行結果:

1

catchable fatal error: argument 1 passed to useradmin::changename() must be an instance of normaluser, string given, called in e:\phpprojects\nowamagic\php\php_typetips.php on line 221 and defined in e:\phpprojects\nowamagic\php\php_typetips.php on line 217

建議在定義方法引數時,要使用型別提示。

如果型別不是物件,要採用**進行型別建議,以增強安全性。

PHP類與物件

建立乙個類 class student 歌 public function run public function showself 我的成績是 this sing 成都 class teacher public function dance 例項化物件 student1 new student e...

php解釋類與物件

類是物件導向程式設計的基本概念,通俗的理解類就是對現實中某乙個種類的東西的抽象,比如汽車可以抽象為乙個類,汽車擁有名字 輪胎 速度 重量等屬性,可以有換擋 前進 後退等操作方法。通常定義乙個汽車類的方法為 class car 類是一類東西的結構描述,而物件則是一類東西的乙個具體例項,例如汽車這個名詞...

php物件導向程式設計 類與物件

1 類和物件的區別與聯絡 1.類是抽象的,概念的,代表一類事物,比如人類,貓類 2.物件是具體的,實際的,代表乙個具體的事物 3.類是物件的模板,物件是類的乙個個體例項 2 類與物件例項 建立乙個cat類 class cat 建立乙個物件 cat1 通過cat類建立乙個cat1物件 cat1 new...