声明和使用全局变量在核心 php 中的行为与在 codeigniter 中的行为不同



在全局范围内的核心 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-变量,这就是它起作用的原因

引用:

您可以在手册中阅读有关变量作用域的更多信息

笔记:

  1. 这不是 CodeIgniter 特有的内容。这就是作用域在 PHP 中的工作方式。
  2. 使用global被认为是一种反模式,应尽可能避免(在大多数情况下可以),因为它会使调试变得非常痛苦,并且很容易引入不需要的副作用。
  3. 我建议您不要将函数放在视图中。将它们添加为可以在加载视图之前加载的帮助程序函数。这将使查找函数变得更加容易(因为它们都在同一个位置),并且可以轻松重用。

相关内容

  • 没有找到相关文章

最新更新