2012-05-24 1 views
0

Мне было интересно, можно ли изменить и инициализировать переменные в функции, не передавая аргументы функции. Вот что я хочу добиться:Изменение и инициализация переменных в функции

$foo = 'Lorem'; 
$array = array(); 
foobar($foo); 
function foobar(){ 
    if (strlen($foo)== 1) 
     $bar = 'Ipsum'; 
    else 
     $array[] = 'error'; 
} 

fubar(); 
function fubar(){ 
    if (empty($fouten)) 
     echo $bar; 
} 

ответ

1

$foo является локальным (неинициализированным) переменной внутри функции. Он отличается от глобальной переменной $foo ($GLOBALS['foo']).

У вас есть два пути:

$foo; 
$bar; 
$array = array(); 

function foobar(){ 
    global $foo, $array, $bar; 
    if (strlen($foo)== 1) 
     $bar = 'Ipsum'; 
    else 
     $array[] = 'error'; 
} 

или с помощью $GLOBAL массива ...

Это не очень хорошая практика, хотя и станет поддержание кошмар со всеми этими побочными эффектами

1

Функции в php могут быть заданы аргументы, которые имеют значения по умолчанию. Код, который вы отправили в письменном виде, даст вам уведомления о неопределенных переменных. Вместо этого вы могли бы написать:

function foobar($foo = null) { 
    if($foo) { // a value was passed in for $foo 
    } 
    else { // foo is null, no value provided 
    } 
} 

Используя эту функцию, ни один из приведенных ниже строк будет производить уведомление

foobar(); 
foobar('test'); 
+1

следует проверить 'если (is_null ($ Foo))', как пустая строка бросает в 'false'. Зависит от требований, конечно, но примечателен. – Dan

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