Что такое перегрузка PHP-функций?

В таких языках, как Java, перегрузка может быть использована следующим образом:

void test($foo, $bar){} int test($foo){} 

Затем, если вы вызвали test() с двумя аргументами, например test($x, $y); , вызывается первая функция. Если вы передали только один аргумент, например test($x); , вызывается вторая функция.

Из руководства кажется, что php 5 имеет перегрузку, но для чего это нужно? Кажется, я не понимаю руководства по этой теме.

Solutions Collecting From Web of "Что такое перегрузка PHP-функций?"

Значение перегрузки PHP в отличие от Java. В PHP перегрузка означает, что вы можете добавлять элементы объекта во время выполнения, реализуя некоторые из методов __magic , таких как __get , __set , __call , __call . Вы загружаете объекты новыми членами.

Перегрузка в PHP предоставляет возможность динамически «создавать» свойства и методы. Эти динамические объекты обрабатываются с помощью магических методов, которые можно установить в классе для различных типов действий.

Пример:

 class Foo { public function __call($method, $args) { echo "Called method $method"; } } $foo = new Foo; $foo->bar(); // Called method bar $foo->baz(); // Called method baz 

И, кстати, PHP поддерживает такую ​​перегрузку с PHP 4.3.0. Единственное различие заключается в том, что в версиях до PHP 5 вам пришлось явно активировать перегрузку с помощью функции overload() .

Если вы хотите перегрузить функцию, как в Java, не указывайте никаких аргументов и используйте func_num_args и func_get_args чтобы получить количество аргументов или самих аргументов, которые были переданы этой функции:

 function test() { $args = func_get_args(); switch (count($args)) { case 1: // one argument passed break; case 2: // two arguments passed break; default: // illegal numer of arguments break; } } 

Для перегрузки функция просто передаёт параметр как null по умолчанию,

 class ParentClass { function mymethod($arg1 = null, $arg2 = null, $arg3 = null) { if( $arg1 == null && $arg2 == null && $arg3 == null ){ return 'function has got zero parameters <br />'; } else{ $str = ''; if( $arg1 != null ) $str .= "arg1 = ".$arg1." <br />"; if( $arg2 != null ) $str .= "arg2 = ".$arg2." <br />"; if( $arg3 != null ) $str .= "arg3 = ".$arg3." <br />"; return $str; } } } // and call it in order given below ... $obj = new ParentClass; echo '<br />$obj->mymethod()<br />'; echo $obj->mymethod(); echo '<br />$obj->mymethod(null,"test") <br />'; echo $obj->mymethod(null,'test'); echo '<br /> $obj->mymethod("test","test","test")<br />'; echo $obj->mymethod('test','test','test');