在全局范围内的核心 php示例 1工作正常,并且由于添加了b=a+b
而打印B=15
但是在Codeigniter中,它打印B=10
这是$b
的初始值,这意味着全局范围与Codeigniter中的核心PHP不同。
示例 1 在核心 php 中工作正常,但在代码点火器中不起作用
$a = 5;
$b = 10;
function myTest() {
global $a, $b;
$b = $a + $b;
}
myTest();
echo "B=$b"; //prints "B=15" in core php and "B=10" in Codeigniter
示例 2 在核心 php 和代码点火器中工作正常
global $a,$b;
$a = 5;
$b = 10;
function myTest() {
global $a, $b;
$b = $a + $b;
}
myTest();
echo "B=$b";//prints "B=15" in core php and in Codeigniter both.
我已经在我的代码点火器视图中使用了此示例-2。
我知道示例-2在语法上不正确,但示例-1在语法上是正确的,但是我的问题是:
为什么它在代码点火器中不起作用,为什么示例 2具有两次初始化global
在代码点火器中工作
视图(编写代码的位置)包含在类方法中并执行(这意味着视图中的代码不在全局范围内)。
例如#1:
如果在函数中使用global $a;
(技术上将在方法内部定义),它将使用全局作用域中的$a
,而您在视图作用域(视图类方法的作用域)中定义了$a
。
例如#2:
当您在定义变量之前使用global $a;
时,您将在两种情况下都使用全局范围内的$a
-变量,这就是它起作用的原因
引用:
您可以在手册中阅读有关变量作用域的更多信息
笔记:
- 这不是 CodeIgniter 特有的内容。这就是作用域在 PHP 中的工作方式。
- 使用
global
被认为是一种反模式,应尽可能避免(在大多数情况下可以),因为它会使调试变得非常痛苦,并且很容易引入不需要的副作用。 - 我建议您不要将函数放在视图中。将它们添加为可以在加载视图之前加载的帮助程序函数。这将使查找函数变得更加容易(因为它们都在同一个位置),并且可以轻松重用。