對于弱類型語言來說,PHP函數重載,并不像一般的OOP那樣。而弱類型本來就不區分,所以無法通過這些來實現,但是,可以通過下面的方法來實現簡單的
- <? php
- //函數重載的替代方法-偽重載
- //
- //確實,在PHP中沒有函數重載這個概念,讓很多時候我們無法進行一些處理,甚至有時候不得不在函數后面定義好N個參數
- //在看到了func_get_arg,func_get_args,func_num_args,這三個函數的時候,你們是不是想起了什么?
- function testOne ( $a ) {
- echo (' 一個參數就這樣 ');
- }
- function testTwo ( $a , $b ){
- echo (' 兩個參數的就這樣 ');
- }
- function testThree ($a, $b, $c ) {
- echo (' 黑黑,這是三個參數的 ');
- }
- function test () {
- $argNum = func_num_args ();
- // 這一段其實可以用 $_arg = func_get_args() 來獲得所有的參數,只是要用數組而已,不方便我下面的表達,呵呵
- for ( $i = 0 ; $i < $argNum ; $i ++ ) {
- $_arg_ { $i } = func_get_arg ( $i );
- }
- switch ( $argNum ) {
- case 1 :
- testOne( $_arg_1 );
- break ;
- case 2 :
- testTwo( $_arg_1, $_arg_2 );
- break ;
- case 3 :
- testThree( $_arg_1, $_arg_2, $_arg_3 );
- break ;
- default :
- echo ( ' 這是沒有參數的情況 ' );
- break ;
- }
- }
- test();
- echo ( ' ' );
- test( 1 );
- echo ( ' ' );
- test( 1 , 2 );
- echo ( ' ' );
- test( 1 , 2 , 3 );
- // 這些只是在函數中的運用,其實最主要的還是在類中的運用
- //如果這些用到類里面我就不需要擔心構造函數是否有幾個參數了,不是嗎?
- class test {
- var $a = 0 ;
- var $b = 0 ;
- function test () {
- $argNum = func_num_args ();
- $_arg = func_get_args ();
- switch ($argNum ) {
- case 1 :
- $this -> test1( $_arg [ 0 ] );
- break ;
- case 2 :
- $this -> test2( $_arg [ 0 ] , $_arg [ 1 ]);
- break ;
- default :
- $this -> a = 0 ;
- $this -> b = 1 ;
- break ;
- }
- }
- function test1 ($a) {
- $this -> a = $a ;
- }
- function test2 ($a, $b) {
- $this -> a = $a ;
- $this -> b = $b ;
- }
- }
- ?>
偽重載吧。
函數重載的替代方法-偽重載,下面看一個具體的實例代碼。
新聞熱點
疑難解答