Списки аргументів змінної довжини

 

В PHP4 можна створювати функції зі змінним числом аргументів. Тобто ми створюємо функцію, не знаючи заздалегідь, зі скількома аргументами її викличуть. Для написання такої функції ніякого спеціального синтаксису не потрібно. Все робиться за допомогою вбудованих функцій func_num_args (), func_get_arg (), func_get_args ().

Функція func_num_args () повертає число аргументів, переданих в поточну функцію. Ця функція може використовуватися тільки усередині тіла функції користувача. Якщо вона з'явиться поза функцією, то інтерпретатор видасть попередження.

Приклад. Використання функції func_num_args ()

<? Php 
function DataCheck () { 
$N = func_num_args (); 
echo "Кількість аргументів функції $N"; 

DataCheck (); 
// Виведе рядок 
// "Число аргументів функції 0" 
DataCheck (1,2,3); 
// Виведе рядок 
// "Число аргументів функції 3" 
?> 
 

Функція func_get_arg (ціле номер_аргумента) повертає аргумент зі списку переданих у функцію аргументів, порядковий номер якого заданий параметром номер_аргумента. Аргументи функції починаються з нуля. Як і func_num_args (), ця функція може використовуватися тільки усередині тіла якої-небудь функції.

Номер_аргумента не може перевищувати число аргументів, переданих у функцію. Інакше буде згенероване попередження, і функція func_get_arg () поверне False.

Створимо функцію для перевірки типу даних її аргументів. Вважаємо, що перевірка пройшла успішно, якщо перший аргумент функції - ціле число, другий - рядок.

Приклад. Функція для перевірки типу даних, її аргументів

<? 
function DataCheck () { 
$Check = true; 
$n = func_num_args (); 
// Число аргументів, 
// Переданих у функцію 
/* Перевіряємо, чи є першим 
переданий аргумент цілим числом */ 
if ($ n> = 1) if (! is_int (func_get_arg (0))) 
$Check = false; 
/* Перевіряємо, чи є другий 
переданий аргумент рядком */ 
if ($n> = 2) 
if (!is_string (func_get_arg (1))) 
$Check = false; 
return $Check; 


if (DataCheck (123, "text")) 
echo "Перевірка пройшла успішно <br>"; 
else echo "Дані не задовольняють 
умовам <br> "; 
if (DataCheck (324)) 
echo "Перевірка пройшла успішно <br>"; 
else echo "Дані не задовольняють умовам <br>"; 
?> 

Результатом роботи буде наступне. 
Перевірка пройшла успішно 
Перевірка пройшла успішно

Функція func_get_args () повертає масив, що складається зі списку аргументів, переданих функції. Кожен елемент масиву відповідає аргументу, переданому функції. Якщо функція використовується поза тілом функції, то генерується попередження.

Перепишемо попередній приклад, використовуючи цю функцію. Будемо перевіряти, чи є цілим числом кожен парний аргумент, переданий функції:

<? 
function DataCheck () { 
$Check = true; 
$N = func_num_args (); 
// Число аргументів, 
// Переданих у функцію 

$Args = func_get_args (); 
// Масив аргументів функції 
for ($i = 0; $i <$ n; $i + +) { 
$V = $ args [$ i]; 
if($ i% 2 == 0) { 
if(!is_int ($V)) $ check = false; 
// Перевіряємо, 
// Чи є парний аргумент цілим 


return $ check; 

if (DataCheck (array ("text", 324))) 
echo "Перевірка пройшла успішно <br>"; 
else echo "Дані не задовольняють 
умовам <br> "; 
?>

Як бачимо, комбінації функцій func_num_args (), func_get_arg () і func_get_args () використовується для того, щоб функції могли мати змінний список аргументів. Ці функції були додані тільки в PHP 4. У PHP3 для того, щоб домогтися подібного ефекту, можна використовувати в якості аргументу функції масив. Наприклад, ось так можна написати скрипт, який перевіряє, чи є кожен непарний параметр функції цілим числом:

<? 
function DataCheck ($params) { 
$Check = true; 
$N = count ($ params); 
// Число аргументів, 
// Переданих у функцію 

for ($i = 0; $i <$ n; $i + +) { 
$V = $params [$ i]; 
if ($ i% 2! == 0) { 
// Перевіряємо, чи є непарний 
// Аргумент цілим 
if (! is_int ($V)) $Check = false; 


return $Check; 

if (DataCheck (array ("text", 324))) 
echo "Перевірка пройшла успішно <br>"; 
else echo "Дані не задовольняють умовам <br>"; 
?>