我有这个代码:
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()访问的局部变量?所以从回声ha()的外出;将值$ user存储在config.php中,并且最后一行echo $ user需要在echo上为空...当我在函数中定义static $ user我得到空值...所以如何在php静态中定义从config.php读取的变量的值和仅在函数中的访问值?
function ha(){
global $user;
$user2 = 'abc'; //no prefix whatsoever
echo $user; //prints global $user
echo $user2; //prints local $user2
}
如何在php中定义从config.php读取的变量的静态值,并仅在函数中访问值?
这都是关于variable scope的,如果你想在一个配置文件中定义一个变量并且只能在一个函数中读取,那么你当前的方法是不正确的。在主要作用域中声明的任何内容(例如在主作用域中加载的配置文件)都可以从代码中的任何位置访问。如果你不希望通过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 docs的可见度。
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!*/
请参阅有关variable scope.的文档。现在不需要第二个echo $user
。在未明确设置为$global
的函数中声明的任何变量都不是全局变量。
您在询问有关定义局部变量的问题,但这本身并不能解决您的问题。 为了那些通过搜索到达这里的人,我会回答这两个问题。
PHP在第一次使用时定义了一个变量。声明本地范围没有关键字。函数内的所有变量默认都是本地的。 (甚至是与另一个全局变量同名的变量)
“第一次使用”是指分配值,而不是使用变量或条件。如果您不确定返回时使用的变量是否会被赋值(例如在config.php中),那么您需要使用dedsired类型的值对其进行初始化。例如:$user = ''
。
你想: 在函数内定义局部变量,只能在该函数的范围内访问。从config.php文件中为该局部变量$ user分配一个值。 不得从该函数外部看到$ user。
你需要将require_once
语句放在该函数中。
如果include发生在调用文件中的函数内部,则调用文件中包含的所有代码将表现为就好像已在该函数内定义的那样。 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专业,read about it.
当我在函数static $ user中定义我得到空值...
你这样做,因为当你在函数之外使用require_once()
时,$ user变量在全局范围内定义。然后你通过使用$ user在ha函数中定义了另一个$ user变量,而没有像global $user
那样声明它是全局的,就像你之后做的那样。