2013-04-01 4 views
2

Я смотрел на Magic Constants и Reflection в PHP, чтобы увидеть, если возможно следующее:Определить локальные переменные в другой функции

function one() { 

    setVars(); 

    // $node would be in scope 
    print_r($node); 

} 

function setVars() { 
    return $node = '2'; 
} 

Это классическая концепция программирования? Отражение кажется самым близким. В принципе, я просто хочу определить переменные в другой области (область/контекст функции, называемой функцией setVars()).

+0

'$ node' не может быть там. вам придется делать '$ node = setVars()' ... если им что-то не хватает. – prodigitalson

+0

Может быть, я должен быть более ясным. Я хотел бы установить MULTIPLE переменные в setVars(). Возвращение не получилось бы здесь – mavame

+1

http://php.net/manual/en/functions.returning-values.php#example-158 – Dave

ответ

1

Для более чем одной переменной попробуйте сохранить их в массиве и вернуть массив.

function one() { 

    $nodeArray = setVars(); 
    print_r($nodeArray); 

} 

function setVars() { 
    $nodeArray[] = 1; 
    $nodeArray[] = 1; 
    $nodeArray[] = 1; 
    return $nodeArray; 
} 
+0

Я должен был быть более ясным. Я хочу определить MULTIPLE переменные, а не только одну. – mavame

+0

Это НЕСКОЛЬКО дорогой. Разница в том, что я сохранил значения в массиве. –

+0

За исключением того, что ваш пример возвращает только одно значение. Тогда мне нужно было бы запустить 'extract' в результате, чтобы в локальной (1) было указано несколько локальных переменных. Спасибо за ваш ответ – mavame

1

Посмотрите на extract().

function one() { 

    $vars = setVars(); 
    extract($vars); 

    // $node1 would be in scope 
    print_r($node1); 

} 

function setVars() { 
    $node1 = '1'; 
    $node2 = '2'; 
    return compact('node1','node2'); 
} 

Следует сказать, хотя это возможно, это часто приводит к ужасной архитектуре и проблемам вниз по линии.

+0

Не нужно компактно и извлекать, я думаю. –

+0

Нет, вероятно, нет, но вопрос задавал вопрос об определении локальных переменных в другой области, и я думаю, что это самое близкое к вам. – GabeIsman

+0

Спасибо за ответ – mavame