我正在使用全局修饰符的基本php示例,它对我不起作用: - |
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo "***: ".$b;
Run Code Online (Sandbox Code Playgroud)
这是结果...... $***:2
php.ini上有没有可能影响这个的参数?
Rem*_*hem 21
我也遇到了你的问题.当我使用框架(Yii)时,我并不完全清楚我的代码确实嵌套在函数内部,因此global没有按预期运行(正如omadmedia和其他人所解释的那样).
我的解决方案非常简单:
global $a;
global $b;
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo "***: ".$b;
Run Code Online (Sandbox Code Playgroud)
oma*_*dia 14
信不信由你,我得到答案:2.这意味着确实存在一些全局无效的情况.
尝试找到原因:似乎如果你有一个函数并将OP的代码(这是一个php.net示例)放在该函数中,你将得到答案2.这有点奇怪,有点在某种程度上是有道理的. ..
(我在Win XP中使用Apache 2.2.8下的PHP 5.2.5)
LE:我的解决方案好了,解决了这个问题:当你在第二个函数中使用global时,你显然得到了超级全局变量,那些可供所有人使用的变量(即在任何函数之外的变量),但是因为在第一个函数中声明了$ a和$ b ,它们不属于该范围,不适用于第二功能.我对一个解决方案的猜测是在第二个函数之外声明$ a和$ b global,它位于第一个函数内部.!请注意,由于各种原因,第一个可能不那么明显,例如您的文件(仅包含第二个函数)被包含在不同文件中不同函数体内的某个位置.
小智 7
正如@AgelessEssence 回答的那样,如果您有嵌套函数,则全局关键字不起作用。从他的例子中可以看出这一点。但是,如果不清楚是否包含文件。这是一个例子。
//a.php
function f() {
require_once('./a_inc.php');
}
f();
//a_inc.php
$a = 12;
function g() {
global $a;
var_dump($a);
}
g();
//result
null
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,$a 看起来像一个全局变量。其实并不是因为它包含在a.php中的函数f()中,而$a是函数f()的一部分。
因此,当您的全局关键字不起作用时,请检查它是否包含在函数中。由于这个问题的解决方案在其他答案中已经解释得很清楚了,所以我没有在这里添加它。
您上面的示例代码对我有用。但您也可以使用$GLOBALS超级变量。
function Sum()
{
$a = $GLOBALS["a"];
$b =& $GLOBALS["b"];
$b = $a + $b;
}
Run Code Online (Sandbox Code Playgroud)
如果可以的话,就不应该使用全局变量。有更好的方法来创建你的函数。使用参数(参数)(可能通过引用 传递)并返回一个值。
/**
* Calculate the sum of the parameters
* @param int|float $a one or more parameter
* @param int|float $a, ...
* @return int|float
*/
function sum($a)
{
$args = func_get_args();
return array_sum($args);
}
$a = 1;
$b = 2;
$b = sum($a, $b);
Run Code Online (Sandbox Code Playgroud)
使用PHPDOC,您可以在几年后了解您的函数的功能,而无需阅读代码。有了好的IDE,您还可以在编写函数时获得解释和参数顺序。