|
Понякога се налага да създаваме функции които могат да се извикват с различен брой параметри, като самата функция има грижата да определи броя параметри и съответно да ги използва според заложената в нея логика. Обикновено в процеса на разработка, когато не е ясен броя на необходимите параметри, повечето програмисти добавят входен параметър когато се наложи и променят кода на функцията.
Вижте следващата примерна функция, която приема три параметъра, конструира и връща масив от техните стойностти: CODE
Функцията ще ни върши работа перфектно, ако сме сигурни, че няма да се наложи да я извикваме с 4, 5 или повече параметри. За щестие има просто решение и то е използването на няколко стандартни PHP функции. Можем да напишем функция без да описваме входните параметри. След това когато извикваме функцията от различни места в кода, можем да подаваме различен брой параметри. Ето как изглежда преработения по този начин код на горния пример: CODE
Всичко, което трябва да направим е да вземем параметрите, които са предадени при извикването на функцията и да ги върнем като е масив. Приемаме, че не сме на ясно колко параметъра ще получи функцията. Тук е мястото да разгледаме вградената PHP функция func_get_args(). Тази функция връща всички входни параметри в масив, подредени по реда на подаването им. Ето пример за извикване на горната функция с 4 параметъра: CODE
Освен това е допустимо и изрично дефениране на аргументи, които се използват по нормалния начин. При извикването на такава функция първо трабва да се изредят стойностти за изрично дефинираните параметри и след тях да се поставят останалите недефинирани параметри. Това е важна подробност, защото програмната логика на функцията нормално ще използва изричните параметри по име, а останалите по индекс. CODE
Горния вариянт има изрично дефиниран параметър $iLimit. Функцията ще върне масив от подадените след $iLimit стрингове, които имат дължина най-много стойността на $iLimit. Ако извикаме функцията така: CODE
Резултатът в $aShortNamedFruits ще бъде масив ('Apple', 'Grape'). Използвахме още 2 от вградените PHP функции:
Важно е да се знае, че изрично дефинираните параметри също влизат в масива с параметрите. Забележете в примера, че цикълът започва от инндекс 1, а не от 0. Това е така, за да прескочим параметъра $iLimit. И така тази фуннкция е готова напълно. Предимството на този подход е, че няма да се налага да се връщате и да я променяте, когато се наложи да подавате различен от първоначално планирания брой параметри. Друго предимство е, че можете да извиквате функцията на различни места в останалия код за да отделите стрингове със зададена максимална дължина (не е задължително да са плодове естествено). Ето, че живота стана малко по-лесен!
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









