В этой статье приведены примеры возможных вариантов написания пользовательских функций в PHP. Эти варианты могут быть усложнены и скомбинированы между собой. Варианты не касаются методов и классов - только самые элементарные функции с простыми данными на входе и выходе. //--------------------------------------------------------- // 1. Обычная функция // Принимает на входе параметры, что-то делает, возвращает результат function maxvalue($a,$b) { if ($a>=$b) return $a; else return $b; } // Напечатает 7 print maxvalue(5,7); //--------------------------------------------------------- // 2. Рекурсивная функция // Функция вызывает сама себя, в первой строке содержит условие выхода function factorial($n) { if ($n==1) return 1; else return factorial($n-1)*$n; } // Напечатает 24 print factorial(4); //--------------------------------------------------------- // 3. Функция с параметрами по умолчанию // Параметры по умолчанию при вызове можно не указывать function sum3($a,$b,$c=10) { return $a+$b+$c; } // Напечатает 20 print sum3(5,5); //--------------------------------------------------------- // 4. Функция, принимающая ссылки // Принимает на только переменные, не может принимать числа-константы function plusone(&$a, &$b) { $a++; ++$b; } $x=3; $y=4; plusone($x,$y); // Напечатает 4 print $x; //--------------------------------------------------------- // 5. Функция, возвращающая ссылку // Возвращает ссылку, а не копию данных function &getref(&$s) { $s = $s . "_world"; return $s; } $y = "hello"; $x =& getref($y); // Напечатает super_hello_world $x="super_".$x; print $y; //--------------------------------------------------------- // 6. Функция с переменным числом параметров // Принимает любое число параметров function bigsum() { $args = func_get_args(); $s = 0; for($i=0;$i<count($args);$i++) $s = $s + $args[$i]; return $s; } // Напечатает 10 print bigsum(1,2,3,4); //--------------------------------------------------------- // 7. Анонимная функция // Функция не имеет имени, "находится внутри переменной" $anonim = function($name) { print "Hello $namen"; }; // Напечатает Hello world $anonim("world"); //--------------------------------------------------------- // 8. Функция, вызванная по имени - через строку с названием // Строку с названием фукнции можно формировать где угодно // и даже хранить в файле (Например, история операций) function f1($name) { print "f1($name)n"; } // Напечатает f1(world) $x = "f1"; $x("world"); //--------------------------------------------------------- // 9. Функция, изменяющая глобальную переменную // Позволяет менять данные, объявленные в главной программе $K=10; $R=10; function change() { global $K; $K=20; $R=20; } // Напечатает 30 change(); print $K+$R; //--------------------------------------------------------- // 10. Функция со статической переменной // Статическая переменная всегда инициализируется до вызова фукнции // Статическая переменная сохраняет состояние после завершения фукнции function increment($add) { static $my = 0; $my = $my + $add; return $my; } // Напечатает 3 increment(1); print increment(2); //--------------------------------------------------------- // 11. Функция, принимающая другую фукнцию // Принимает и вызывает другую фукнцию с заданным параметром function callme($p1,$p2) { print "$p1-$p2n"; } function callfunc($func,$param1,$param2) { $func($param1,$param2); } // Напечатает 100-200 print callfunc("callme", "100", "200"); //--------------------------------------------------------- // 12. Функция, возвращающая другую фукнцию // Возвращает другую функцию в зависимости от аргумента function mult($x) { if ($x>10) return function($a) { return $a*5; }; else return function($a) { return $a*10; }; } // Напечатает 50; print call_user_func(mult(5),5); //--------------------------------------------------------- // 13. Фукнция, принимающая на вход свой результат // Такая фукнция позволяет строить цепочки из данных function makestr($open,$str,$close) { return $open.$str.$close; } // Напечатает (/id/) print makestr( '(', makestr('/','id','/'), ')' ); //--------------------------------------------------------- // 14. Две взаиморекурсивные функции // Вызывают по очереди друг друга // Заменяют 1 на Y или +, 0 на N или - function showbool($str,$pos=0) { if ($pos>=strlen($str)) return ''; $res = $str{$pos}=='1'?'Y':'N'; return $res.showplus($str,$pos+1); } function showplus($str,$pos=0) { if ($pos>=strlen($str)) return ''; $res = $str{$pos}=='1'?'+':'-'; return $res.showbool($str,$pos+1); } // Напечатает Y-Y+N+Y print showbool('1011011'); // Напечатает +N+Y-Y+ print showplus('1011011'); //--------------------------------------------------------- // 15. Функция, возвращающая массив и обратная ей фукнция // Одна - принимает параметры, возвращает массив // Вторая - принимает массив, возвращает параметры через массив function packme($a,$b,$c) { $z = array($a,$b,$c); return $z; } $a = packme(1,2,3); // Напечатает 2 print $a[1]; function unpackme($e) { $a = $e[0]; $b = $e[1]; $c = $e[2]; return array($a,$b,$c); } $m = array(1,2,3); list($x,$y,$z) = unpackme($m); // Напечатает 3 print $z;
PHP Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor