У меня есть этот код:
require_once('../config.php');
function ha(){
global $user; /* THIS I NEED TO DEFINE LOCAL ONLY ACCESS FROM THIS FUNCTION */
return $user;
}
echo ha();
echo $user; /* GLOBAL VARIABLE VALUE */
Итак, как определить в функции локальную переменную, которая будет доступна через функцию ha ()? Так что выход из эха ха (); будет значение $ user, которое хранится в config.php, а последняя строка echo $ user должна быть пустой в echo … когда я определяю в функции static $ user, я получаю пустое значение … так как определить в php static значение переменной, которая читается из config.php и значение доступа только в функции?
function ha(){
global $user;
$user2 = 'abc'; //no prefix whatsoever
echo $user; //prints global $user
echo $user2; //prints local $user2
}
как определить в php статическое значение переменной, которая читается из config.php и значение доступа только в функции?
Это все о переменная область , если вы хотите, чтобы переменная была определена в файле конфигурации и была доступна для чтения только из функции, тогда ваш текущий подход неверен. Все, что объявлено в основной области (например, файл конфигурации, загруженный в основной области), будет доступно практически из любой точки кода. Если вы не хотите, чтобы переменные были доступны иначе, чем через ha()
тогда они должны быть определены в пределах ha()
,
Предполагая, что я понимаю, что вы просите здесь, вы можете сделать это:
class Private {
private $user = 'value'; // declare $user as a private variable
function ha() {
echo $this->user;
}
}
$object = new Private();
echo $object->user; // returns fatal error
$object->ha(); // echoes 'value'
Подробнее о видимости в PHP документы.
require_once('../config.php');
function ha(){
$user; /* THIS I NEED TO DEFINE LOCAL ONLY ACCESS FROM THIS FUNCTION */
return $user;
}
echo ha();
//echo $user; /* (unnecessary) GLOBAL VARIABLE VALUE, same as echoing the result of the function!*/
Пожалуйста, смотрите документацию на переменная область Второй echo $user
сейчас ненужно. Любая переменная, объявленная в функции, для которой явно не установлено $global
не будет глобальным.
Вы спрашиваете об определении локальной переменной, но это само по себе не решит вашу проблему.
Ради тех, кто попал сюда поиском, я отвечу на оба.
PHP определяет переменную при первом ее использовании. Нет ключевого слова для объявления локальной области. Все переменные внутри функций являются локальными по умолчанию. (даже переменная с тем же именем, что и другая глобальная переменная)
«Первое использование» означает присвоение значения, а не использование возвращаемой переменной или условия. Если вы не уверены, что переменной, которую вы используете при возврате, будет присвоено значение (например, внутри config.php), вам необходимо инициализировать его, используя значение типа dedsired. например.: $user = ''
,
Ты хотел:
Определите локальную переменную внутри функции, доступную только внутри области действия этой функции. Этой локальной переменной $ user присваивается значение из файла config.php.
$ user не должен быть виден снаружи этой функции.
Вам нужно поставить require_once
утверждение внутри этой функции.
Если включение происходит внутри функции в вызывающем файле, то
весь код, содержащийся в вызываемом файле, будет вести себя так, как если бы он
был определен внутри этой функции.
http://php.net/manual/en/function.include.php
function ha(){
static $user;
require_once('../config.php');
if (!isset($user)) { $user = ''; } // only needed if you are not sure config.php will define the $user variable
return $user;
}
echo ha();
echo $user; // will output nothing
с помощью static
Ключевое слово позволит функции сохранять значение $ user. Это необходимо, потому что если вы вызовете функцию во второй раз, config.php больше не будет включен (require_once()
).
PHP имеет три переменных области. глобальный, локальный и статический. Статика не такая как местный, но ведет себя так же в некотором смысле, где переменная доступна. Статическая область действия в функции — это специальность PHP, читать об этом.
когда я определяю в функции static $ user я получаю пустое значение …
Вы делаете, потому что, когда вы использовали require_once()
вне функции переменная $ user была определена в глобальной области видимости. Тогда вы определили другой Переменная $ user внутри функции ha с использованием $ user, не объявляя ее глобальной global $user
, как вы сделали позже.