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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php获得对象的类型,php 类型(对象)提示

發布時間:2025/3/15 php 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php获得对象的类型,php 类型(对象)提示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP面向對象:類型提示

2010-07-06

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

沒有類型提示很危險

下面的代碼可能會出現問題。

01

02

class?NormalUser{

03

/*

04

* 其它相關代碼..省略........

05

*/

06

private?$age;

07

public?function?setAge($_age){

08

$this->age =$_age;

09

}

10

public?function?getAge(){

11

return?$this->age ;

12

}

13

}

14

15

$normalUser?=new?NormalUser();

16

$normalUser->setAge("I am tom");//這里我們傳輸一個非數值.

17

echo?"age is "?.$normalUser->getAge();

18

19

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

20

?>

程序運行結果:

1

age is I am tom

原始類型的類型判斷

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

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

于是代碼有了修改:

01

02

class?NormalUser{

03

/*

04

* 其它相關代碼..省略........

05

*/

06

private?$age;

07

public?function?setAge($_age){

08

if(is_numeric($_age)){

09

$this->age =$_age;

10

}

11

}

12

public?function?getAge(){

13

return?$this->age ;

14

}

15

}

16

17

$normalUser?=new?NormalUser();

18

$normalUser->setAge("I am tom");//這里我們傳輸一個非數值.

19

echo?"age is "?.$normalUser->getAge();//看到這里的結果為空.

20

echo??"
";

21

$normalUser->setAge("100");

22

echo?"age is ".$normalUser->getAge();// 這里就有了結果.

23

?>

程序運行結果:

1

age is

2

age is 100

向方法內傳遞對象

如果傳遞的參數是一個對象呢?下面的代碼用起來很正常。

01

02

class?NormalUser {

03

private?$name;

04

public?function?setName($_name){

05

$this->name =$_name;

06

//這里有存入數據庫等等代碼....

07

}

08

public?function?getName(){

09

return?$this->name;

10

}

11

}

12

13

class?UserAdmin{

14

//這里定義的參數,第一個是User類的實例,第二是要設置的名字.

15

public?static?function?changeName($_user,$_name){

16

$_user->setName($_name);

17

}

18

}

19

20

$normalUser?=new?NormalUser();

21

UserAdmin::changeName($normalUser,"Tom");

22

echo?"userName is "?.$normalUser->getName();

23

24

?>

程序運行結果:

1

userName is Tom

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

如果我向,剛才代碼中的方法changeName() 中傳入一個Book的實例,原定于改變人名的方法現在改變了書的書名。

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

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

01

02

class?NormalUser{

03

private?$name;

04

public?function?setName($_name){

05

$this->name =$_name;

06

}

07

public?function?getName(){

08

return?$this->name;

09

}

10

}

11

12

class?Book{

13

private?$bookName;

14

public?function?setName($_name){

15

$this->bookName =$_name;

16

}

17

public?function?getName(){

18

return?$this->bookName;

19

}

20

}

21

22

class?UserAdmin{

23

public?static?function?changeName($_user,$_name){

24

$_user->setName($_name);

25

}

26

}

27

28

$book?=new?Book();

29

UserAdmin::changeName($book,"Tom");

30

echo?"bookName is "?.$book->getName();

31

32

?>

程序運行結果:

1

bookName is Tom

類型提示保障數據安全

為了避免對象類型不規范引起的問題,PHP5中引入了類型提示這個概念。

在定義方法參數時,同時定義參數的對象類型。

如果在調用的時候,傳入參數的類型不對會報錯。這樣保證了數據的安全性。

01

02

class?NormalUser {

03

private?$name;

04

public?function?setName($_name){

05

$this->name =$_name;

06

}

07

public?function?getName(){

08

return?$this->name;

09

}

10

}

11

12

class?UserAdmin{

13

public?static?function?changeName(NormalUser$_user,$_name){

14

$_user->setName($_name);

15

}

16

}

17

UserAdmin::changeName("anyType","Tom");

18

?>

程序運行結果:

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 221and?defined in E:\PHPProjects\NowaMagic\php\php_TypeTips.php on line 217

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

如果類型不是對象,要采用代碼進行類型建議,以增強安全性。

原文(http://www.nowamagic.net/php/php_TypeTips.php)

總結

以上是生活随笔為你收集整理的php获得对象的类型,php 类型(对象)提示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。