Функция functionName (если предложение здесь) возможно? - PullRequest
0 голосов
/ 22 января 2009
function getTemplate($tpl if ($vars) echo ", $vars";)...function

Возможно ли это как-нибудь? Вышеуказанное не сработает.

Спасибо

Ответы [ 4 ]

6 голосов
/ 22 января 2009

Необязательные аргументы со значениями по умолчанию

Похоже, вам нужен необязательный аргумент, который можно выполнить, определив значение по умолчанию в определении функции:

function getTemplate($tpl, $vars=null)   
{

}

Вы можете вызвать эту функцию как getTemplate ($ foo) или getTemplate ($ foo, $ bar). Для получения дополнительной информации см. Справочную страницу PHP с аргументами функции .

Переменные числа аргументов

Также можно написать функции, которые принимают переменное число аргументов, но вам нужно использовать функции func_num_args , func_get_arg и func_get_args, Вот пример из руководства

<?php
function foo() 
{
   $numargs = func_num_args();
   echo "Number of arguments: $numargs<br />\n";
   if ($numargs >= 2) {
       echo "Second argument is: " . func_get_arg(1) . "<br />\n";
   }
   $arg_list = func_get_args();
   for ($i = 0; $i < $numargs; $i++) {
       echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
   }
} 

foo(1, 2, 3);
?>

Вызов функции с переменным числом параметров

Чтобы еще больше округлить этот ответ, предположим, что вы создали бы массив значений 1..n и хотели бы передать его в функцию foo (), определенную выше? Вы бы использовали call_user_func_array

$values=(1,2,3,4);
call_user_func_array('foo', $values);

Это эквивалент звонка

foo(1,2,3,4);
2 голосов
/ 22 января 2009

Что плохого в

function getTemplate($tpl, $vars=null)   {}

0 голосов
/ 22 января 2009

Или:

getTemplate($tpl, ($vars)?$vars:null); // not sure

getTemplate($tpl, (!empty($vars))?$vars:null);

Также, если вам нужна техника, похожая на echo:

$code = "getTemplate($pl";
if ( $vars ) { $code = $code . ", $vars);"; }
else { $code = $code . ");"; }
$ret = eval($code);

Хотя это обычно считается плохой практикой (никогда не говори никогда). Обратите внимание, что весь код, отправленный на eval , будет выполняться напрямую. Поэтому не помещайте пользовательский ввод в вызов eval ().

0 голосов
/ 22 января 2009
if ($vars) { getTemplate($tpl, $vars); }
else {{ getTemplate($tpl, null); }

(полупсевдокод)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...