2016-09-28 1 views
2

Есть ли какой-либо работы или другой разницы между следующие два случая доступа к глобальной переменной в затворе:PHP - Разница между 'use()' или 'global' для доступа к глобальной переменной в закрытии?

Случай 1:

$closure = function() use ($global_variable) { 
    // Use $global_variable to do something. 
} 

Случай 2:

$closure = function() { 
    global $global_variable; 
    // Use $global_variable to do something. 
} 

ответ

5

Существует важное различие между вашими двумя примерами:

$global_variable = 1; 

$closure = function() use ($global_variable) { 
    return $global_variable; 
}; 

$closure2 = function() { 
    global $global_variable; 
    return $global_variable; 
}; 

$global_variable = 99; 

echo $closure(); // this will show 1 
echo $closure2(); // this will show 99 

use принимает значение $global_variable во время определения замыкания во время global принимает текущее значение $global_variable во время выполнения.

global наследует переменные из глобальной области видимости, а use наследует их от родительской области.

+0

Хотя это верно, во многих случаях вы хотите передать экземпляр объекта в закрытие. Объекты передаются по ссылке, и любые изменения состояния объекта ** после ** определения закрытия будут доступны в закрытии. – Benni

0

Use ключевое слово находится в исходной области, а global и $GLOBALS - это м повсюду.

Это означает, что если вы используете global, вы можете не знать, изменилось ли значение, откуда и по какому типу изменений.

У вас больше контроля с помощью use. Так что это зависит от ваших потребностей.

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