php深入學習三 物件導向以及函式過載

2021-08-02 10:41:49 字數 1496 閱讀 9671

我不生產輪子,我只是輪子的搬運工:php 物件導向 | 菜鳥教程

物件導向的程式設計入門教程推薦上方鏈結。本文僅就php物件導向的函式過載作介紹。話不多說先來一段**和控制台輸出結果。含注釋。稍後會作詳細講解。建議自己先仿照下放**寫一遍,結合注釋適當理解,再看後文講解。

<?php 

/** * created by phpstorm.

* user: funco

* date: 17-6-9

* time: 下午1:39

*/class mulstat

// showstring 可以接受乙個引數

private function showstring($str)

// __call方法 可以獲取例項化物件呼叫的成員函式名和向該被調函式傳遞的引數個數

public function __call($name, $args) // switch

}// if

}}//例項化mulstat類

$mulstat = new mulstat();

echo "\$mulstat->showinfo(\"funco 小風\"):\n";

$mulstat->showinfo("funco 小風");

// 兩次換行 便於觀察結果

echo "\n\n";

echo "\$mulstat->showinfo():\n";

$mulstat->showinfo();

控制台輸出結果如下

第一行和最後一行非程式輸出,為ide自動輸出

首先我們需要知道,__call方法是php的乙個魔術方法,關於__call的詳細介紹可以參考我的博文:php深入學習二——魔術方法以及__call的呼叫

如上方**實際執行過程如下

1.  例項化類mulstat,並令$mulstat作為其實例化物件的引用

2. 呼叫$mulstat的成員方法showinfo並傳遞乙個引數"funco 小風"字串。

3. showinfo命名且含乙個引數的命名方式的成員函式不存在,且__call被正確定義

4. 將該函式名稱showinfo作為字串傳遞給__call的第乙個引數(這裡是$name),將傳遞的引數列表(這裡是["funco 小風"])作為引數傳遞給__call的第二個引數(這裡是$args)

5. 判斷函式名(這裡即判斷$name是否等於"showinfo")

6. 判斷引數個數並呼叫相應希望呼叫的函式(這裡即為switch語句部分的工作)

之後呼叫showinfo()的過程類似上方的2-6步。可以自行嘗試推導

總結:綜上所述,php本身不支援多型,但是我們通過借助__call方法實現類似多型即函式過載的功能。需要注意的是,只有被呼叫的函式不存在時__call才會被呼叫,至於更複雜的函式過載的實現,讀者可以自己嘗試,萬變不離其宗。

Scala 學習筆記三 物件導向

一 物件導向的概 object oriented oo 1.封裝 將屬性 方法封裝到類中 2.繼承 父類和子類之間的關係 3.多型 父類引用指向子類物件 多型是物件導向程式設計的精髓所在,是開發框架的基礎 二 類的定義和使用 main方法 def main args array string uni...

物件導向學習(三) 物件導向的三大特徵之一封裝性

封裝 繼承 多型 1.方法就是一種封裝 2.關鍵字private也是一種封裝 封裝就是將一些細節資訊隱藏起來,對於外界不可見 package cn.itcast.demo.object oriented.demo02 public class demo01method int max getmax ...

設計模式學習 三 物件導向設計模式之黎克特制替換原則

黎克特制替換原則定義 所有引用基類的地方必須能透明地使用其子類的物件。簡單來說,乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,只要父類能夠出現的地方子類就可以出現,而且將父類替換為子類程式不會產生錯誤或異常,而且我們有可能察覺不出父類和子類物件的區別 相反的,如果乙個軟體實體如果使用的...