我有这段代码:
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读取的变量值和仅在函数中访问的值?
答案 0 :(得分:3)
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()
内定义变量。
答案 1 :(得分:0)
假设我理解你在这里要求的东西,你可以这样做:
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的可见度的更多信息。
答案 2 :(得分:0)
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
的函数中声明的任何变量都不是全局的。
答案 3 :(得分:0)
您正在询问有关定义局部变量的信息,但仅靠它本身并不能解决您的问题。 为了让那些人通过搜索到达这里,我将同时回答。
PHP首次使用时定义了一个变量。没有用于声明本地作用域的关键字。默认情况下,函数中的所有变量都是局部变量。 (甚至是与另一个全局变量同名的变量)
“首次使用”是指分配一个值,而不使用变量作为返回值或条件。如果不确定在返回时使用的变量将被分配一个值(例如,在config.php中),则需要使用所需类型的值对其进行初始化。例如:$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具有三个变量范围。全局,局部和静态。静态与 local 不同,但是在可访问变量的意义上,其行为相同。函数中的静态作用域是PHP专长read about it.
当我在函数static $ user中定义时,我得到空值...
之所以这样做,是因为在函数之外使用require_once()
时,$ user变量是在全局范围内定义的。然后,您通过使用$ user在ha函数中定义了另一个 $ user变量,而没有像以后所做的那样声明global $user
使其为全局变量。