2013-12-24 2 views
0

Я где-то читал, что при определении функции можно определить значение по умолчанию для переменных, которые вы можете использовать или не использовать, например, так:Сколько переменных по умолчанию можно определить в определении функции php?

function test($a, $b, $c=0) { 
    if ($c != 0) 
     echo 'a + b + c = '.($a + $b + $c); 
    else 
     echo 'a + b = '.($a + $b); 
} 

Я задавался вопросом, сколько таких переменных со значениями по умолчанию, я могу добавьте, когда я определяю функцию. Это только один? или я могу определить несколько из них, не получая «функцию, ожидающую передачи X переменных», тип ошибки? Другими словами я могу это сделать?

function test($a, $b, $c=0, $d=1, $e=2) { 
    if ($c != 0) 
     echo 'a + b + c = '.($a + $b + $c); 
    else 
     echo 'a + b = '.($a + $b); 
} 

и вызов функции только с тестом (4,9); ?

+5

У вас может быть столько, сколько вы хотите. – Barmar

+3

Просто протестируйте его с любой установкой PHP. (Подсказка: вы не получите никаких ошибок) – ComFreek

+2

Когда вы можете проверить что-то быстрее, чем вы можете напечатать длинный вопрос на нем ... сначала проверьте его :) – Vulcan

ответ

1

Вы можете определить столько дополнительных параметров, сколько хотите, PHP предлагает это вместо method overloading, как вы бы видели на Java или C#.

Удостоверьтесь, что после необязательных параметров вы не ставите какие-либо необязательные параметры. Может показаться, как здравый смысл, но я видел, что люди путаются, потому что они получают предупреждение или сообщение об ошибке при попытке сделать это:

Invalid:

function myFunction($a = 1, $b = 2, $c, $d = null) 

В приведенном выше случае, $c должен быть первым аргументом.

+0

спасибо @Jason Fingar – marcnyc

+0

Просто помните, что обязательные аргументы на первом месте, затем необязательные.И необязательные аргументы назначаются слева направо, поэтому вы не можете пропускать их и использовать «более позднюю». –

1

Это одна из функции НАД НАГРУЗКИ, В следующем примере прояснит ваши сомнения,

class argument_class 
{ 
    function mymethod($arg1 = null, $arg2 = null, $arg3 = null) 
    { 
    if($arg1 == null && $arg2 == null && $arg3 == null){ 
    return 'function has got zero parameters <br />'; 
    } 
    else{ 
    $str = ''; 
    if($arg1 != null) 
    $str .= "arg1 = ".$arg1." <br />"; 
    if($arg2 != null) 
     $str .= "arg2 = ".$arg2." <br />"; 
    if($arg3 != null) 
    $str .= "arg3 = ".$arg3." <br />"; 
    return $str; 
    } 
    } 
} 



$obj = new argument_class; 

echo '<br />$obj->mymethod()<br />'; 
echo $obj->mymethod(); 

echo '<br />$obj->mymethod(null,"argument_2") <br />'; 
echo $obj->mymethod(null,'argument'); 

echo '<br /> $obj->mymethod("argument_1","argument_2","argument_3")<br />'; 
echo $obj->mymethod('argument_1','argument_2','argument_2'); 
1

Вы спрашиваете о аргументах функции со значениями по умолчанию. PHP не применяет предел здесь, он просто привязан к доступной памяти.

Как я показал in an answer to a related question (PHP Functions - Maximum number of arguments), было возможно иметь 255 555 аргументов перед запуском в ограничение памяти. Конечно, это единственный случай, это может варьироваться в зависимости от доступной памяти.

Этот вопрос также содержит another answer, который объясняет, что происходит, когда вы вызываете функцию. Понимание этого также должно помочь вам лучше принимать решения о количестве параметров.

С точки зрения кодирования функция должна иметь как можно меньше параметров, в лучшем случае 0, возможно, один, но любые другие параметры должны быть максимально возможными. Если вы не можете уменьшить количество параметров, это знак для проверки дизайна кода.

Смежные вопросы