国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php :可笑的重載

2019-11-08 02:15:27
字體:
來源:轉載
供稿:網友

在OOP語言中,重載是定義一個和已有方法同名的方法,當然,返回值,或者參數類型會發生改變。

但是,在php中,重載完全不是這種概念。PHP 中的重載是創建一個沒有定義的方法或者屬性。

PHP中重載屬性非常容易理解,本質上就是內部創建一個數值,然后提供 __set()/__get()方法,來增減私有數值的元素。以此達到”重載屬性”的目的。 從OOP語言角度而言,這是一種很常見的做法,但是在OOP中這種做法不叫重載。將有這種功能的類成為POJO或者javaBean。PHP中重載函數相對于重載屬性有點難理解,但也是可以理解的。重載函數本質上是對PHP中可變函數的一種使用。在OOP語言中,沒有所謂的可變函數的說法,也沒有類似的功能。然而,可變函數的使用,一定會導致代碼的可讀性變差。那么,PHP中,重載函數到底是什么呢?其實,就是在類的內容定義一個可變函數__call($func,$arg),然后,在使用該類的實例的時候,就可以使用該可變函數定義好的函數,也就是所謂的”重載函數“ 在JS,Python等類似的語言中,也有這種可變函數,甚至在C語言中,也有這種功能。但是在OOP語言,比如Java中就不存在類似的功能。有時候寫Java的時候,也希望有這種功能的存在,但是,無論如何,這種可變函數,確實降低了代碼的可讀性~

來看一個重載屬性的例子:

class Car { PRivate $ary = array(); public function __set($key, $val) { $this->ary[$key] = $val; } public function __get($key) { if (isset($this->ary[$key])) { return $this->ary[$key]; } return null; } public function __isset($key) { if (isset($this->ary[$key])) { return true; } return false; } public function __unset($key) { unset($this->ary[$key]); }}$car = new Car();$car->name = '汽車'; //name屬性動態創建并賦值echo $car->name;

和一個重載函數的例子:

class Car { public $speed = 0; public function __call($name, $args) { if ($name == 'speedUp') { $this->speed += 10; } }}$car = new Car();$car->speedUp(); //調用不存在的方法會使用重載echo $car->speed;

從這個重載函數的例子可以看出,這種對于函數的重載并沒有什么實際的意義。畢竟,在實際需求中,往往不需要重載一個叫speedUp 的函數。如果,我們在自己的類中重載一個其他的函數,比如叫say,但是意義也并不明顯。通過這種容易產生歧義的方式去定義函數,必然大大降低代碼的可讀性。實際開發中,還不如直接定義一個叫say的方法來得時在。

另外,例子代碼來自幕客網


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴义市| 荆州市| 娱乐| 沂南县| 汪清县| 集贤县| 花垣县| 郸城县| 舞钢市| 松滋市| 安徽省| 皋兰县| 偏关县| 金华市| 枝江市| 登封市| 武穴市| 凤翔县| 庄河市| 启东市| 孟州市| 建平县| 镇远县| 香港 | 礼泉县| 晴隆县| 松潘县| 平远县| 荣成市| 桂东县| 巨野县| 定州市| 泰州市| 深圳市| 博客| 广汉市| 栖霞市| 黄石市| 内江市| 鹿邑县| 庆安县|