php 限制類的物件型別

2022-05-20 18:23:35 字數 2174 閱讀 8461

事實上,採用哪種處理引數型別的策略,取決於任何潛在bug的嚴重程度。通常php會根據語境自動轉換大多數基本資料型別。

因此,你需要在檢測型別、轉換型別和依賴良好清晰的文件(無論決定用哪一種,都應該提供文件)之間仔細權衡。

無論你如何解決這類問題,都要認真思考一件事情:型別處理。php是一種弱型別的語言,這使得這件事更加重要。我們不能依靠編譯器來防止型別相關的bug,必須考慮當非法資料型別的引數傳遞給方法時,會產生怎樣的後果。

廢話不多說,上**

<?php

/** 這是乙個簡單的商品類

*/classshopproduct

//拼接生產人和生產者名稱,然後返回

public functiongetproducer()

"."";

}}

我們用乙個商品寫入類呼叫商品類,這是我們的一般寫法

<?php

/** 商品寫入類 */

class

shopproductwrite

"."".$shopproduct->getproducer()."

"."";

print

$str

; }

}$product1 = new shopproduct("my antonia","willa","cather",5.99);

$writer = new

shopproductwrite();

$writer->write($product1);

效果:

my antonia

willacather

5.99

shopproductwriter類只包括乙個方法:write()。 write()方法接受乙個shopproduct物件,並用它的屬性和方法構造和列印乙個摘要字串。我們把引數變數命名為$shopproduct,說明該方法希望接受乙個shopproduct物件,但是我們並沒有強制要求這一點。也就是說,我們可能接收到非預期的物件或基本型別,但在實際處理$shopproduct之前不會知道具體是什麼。而那時**則可能已根據預期(接收了真正的shopproduct物件)執行了相應操作。

為了解決這個問題(沒有強制要求引數型別),php5引入了類的型別提示(type hint)。要增加乙個方法引數的型別提示,只需簡單地將類名放在需要約束的方法引數之前。我們可以這樣修改write()方法:

public

function write(shopproduct $shopproduct

)

現在write()方法只接受包含shopproduct物件的$shopproduct引數。讓我們嘗試用乙個錯誤的物件來呼叫write():

class

wrong{}

$writer = new

shopproductwriter();

$writer->writer(new wrong());

效果:fatal error: uncaught typeerror: argument 1 passed to shopproductwrite::write() must be an instance of shopproduct, instance of shopproductsss given, called in d:\work\ceshi\index.php on line 52 and defined in d:\work\ceshi\index.php:44 stack trace: #0 d:\work\ceshi\index.php(52): shopproductwrite->write(object(shopproductsss)) #1 thrown ind:\work\ceshi\index.phpon line44

有了引數的型別提示,我們不再需要在使用引數前對其進行型別檢查。對於客戶端程式員來說,方法的定義更加清晰易懂,一眼就能看明白該方法對於引數的要求,不用再擔心一些由物件型別錯誤而引起的bug,因為提示是嚴格執行的。

function setarray(array

$storearray

)

TypeScript中物件的型別限制 介面

物件的型別 介面 介面在ts中的作用之一 typescript 中的介面是乙個非常靈活的概念,除了可用於對類的一部分行為進行抽象以外,也常用於對物件的形狀進行描述。此篇主要學習對物件的形狀進行描述.inte ce person let tom person let merry person let ...

PHP 物件型別的判斷

gettype描述 string gettype mixed var 返回 php 變數的型別 var.warning 不要使用 gettype 來測試某種型別,因為其返回的字串在未來的版本中可能需要改變。此外,由於包含了字串的比較,它的執行也是較慢的。使用 is 函式代替。返回的字串的可能值為 b...

php 型別介紹(物件以後的型別)

物件 初始化物件 例子 class foo bar new foo bar do foo null 特殊的null值表示乙個變數沒有值。null型別唯一可能的值就是null。注 null型別是 php 4 引進的。在下列情況下乙個變數被認為是null null型別只有乙個值,就是大小寫敏感的關鍵字n...