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...