Function MSort (&$Arr, $NeedSort=1) { // сортируем массив в зависимости от $NeedSort... } Теперь в самой программе можно написать: MSort($my_array,0); // сортируем по возростанию MSort($my_array); // сортирует по убыванию, так как второй параметр у нас задан по умолчанию Это можно было записать и как MSort($my_array,1); !!! Значения переменных по умолчанию должны задаваться справа налево, и недопустимо, когда после такого аргумента шёл обычный аргумент. Понятно? =) Сомниваюсь... Пишите что именно в коментах... Вот такой пример работать не будет:
function MSort($NeedSort=1, &$arr) { ..... } MSort(,$my_array); Вобщем облом... не получается =) Надо делать как в первом случае.
Передача параметров по ссылке. Каков же механизм передачи функцией аргументов? Рассмотрим на примере: function test($a) { echo "$a\\n"; $a++; echo "$a\\n"; } ... $num=10; test ($num); echo $num;
Попрошу заметить, что эта функция не возвращает никакого значения. Начинается всё с того, что создается локальная переменная $a, и ей присваивается значение 10 => печатается => $a увеличаивается на 1 и снова печатается. При последующей распечатке переменной $num напишет 10, а не 11, так как $a- просто копия $num. А с копией можно делать почти всё... =) Честно признаюсь, сам не доконца понял, но запомнил и применяю =) Если же всё-таки стоит задача поизмываться именно с самой переменной, а не с её копией, то надо при передаче аргумента функции перед его именем поставить символ & . Рассмотрим на примере:
function test($a) { echo "$a\\n"; $a++; echo "$a\\n"; } $num=10; test(&$num); // вот она эта закарлючка перед $num echo $num;
Такой метод передачи называется "передачей по ссылке". Лично я, предпочитаю делать так:
function test(&$a) // вот тут обратить внимание { echo "$a\\n"; $a++; echo "$a\\n"; } ... $num=10; test($num); echo $num; // выводит 11 !!!! В качестве параметров передаваемых по ссылке можно использовать только переменные. НО не конкретные значения. Но случаются случаи, когда мы не знаем сколько параметров входит в функцию. Рассмотрим пример: Пусть функция выведет все поступившие в неё параметры лесенкой.
function myecho() { for($i=0; $i<func_num_arg(); $i++) { for($j=0; $j<$i; $j++) echo " "; echo func_get_arg($i)."<br>\\n"; } } myecho("петя","лена","жорик","иваныч");
* int func_num_args() возвращает общее число аргументов, переданых функции при вызове. * mixed func_get_arg(int $num) возвр
|