+ -
当前位置:首页 → 问答吧 → 请问杜江老师,关于您书中的一个问题

请问杜江老师,关于您书中的一个问题

时间:2007-12-07

来源:互联网

您书中提到过,位于书本的P63:“程序中使用global关键字或者使用$GLOBALS[]数组来使一个变量在整个应用程序内具备全局属性”,我理解也就是整个web应用下具备全局属性,但是有个网站提到的确是这样:“global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件”,到底应该如何理解,望指教,那个网站网址是http://cornus.bloghome.cn/posts/79410.html

[ 本帖最后由 canboy365 于 2007-12-7 07:59 编辑 ]

作者: canboy365   发布时间: 2007-12-07

您可以参见书中2.2.6 的描述。
    下面详细描述该问题:
    变量范围(Scope)是一个微妙也是非常重要的概念。
    由于在PHP4.2后,php.ini中已经默认把register_globals的选项关闭(性能优化和安全),因此我们可以使用global和$GLOBALS[]数组(你可以任选其一使用),来指定一个变量或对象是否具有全局域的属性。
    作用域是针对脚本的,当一个PHP脚本结束运行后,我们写的自定义变量将被系统回收删除,另一个脚本运行后,将无法使用和访问脚本所产生的变量值,因此如果要使用上一个脚本的中变量,首先请使用包含语句(include/include_once/require/require_once),然后使用这两个关键字来声明某个变量为全局作用域。
    另外,即便是同一个脚本中,当有你自定义的函数时,要使用外部定义的变量时,并想执行后影响外部自定义变量的值,也可以使用global和GLOBALS[]数组来声明(其实这与包含的意义是相同的,区别就是代码是否在一个文件罢了)。
    下面举例说明:
例1 g1.php:
复制PHP内容到剪贴板
PHP代码:

<?php
//初始化两个变量
$a = 1;
$b = 2;
?>

例2 g2.php
复制PHP内容到剪贴板
PHP代码:

<?php
  require_once('g1.php');  //引用脚本
function cal(){
     $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

cal();
echo $b;  //结果为3
?>

在实际开发中,比如我们把数据库连接对象声明为一个全局对象,如global $dbo,这样在脚本或类中调用对象不需要再使用new关键字进行实例化多次,从而节约了系统的开销与增强了性能,希望这些能对你有帮助。

[ 本帖最后由 phpcast 于 2007-12-7 18:07 编辑 ]

作者: phpcast   发布时间: 2007-12-07

似乎懂了,呵呵,您所说的全局作用域的全局是指针对整个Web应用上下文来说的吧?

作者: canboy365   发布时间: 2007-12-07

全局作用域指的是一个脚本,该脚本同时包含了我们使用include和require引用的脚本代码,而使用$GLOBALS数组和global关键字就可以在脚本的函数或方法中使用共通的变量和对象。

作者: phpcast   发布时间: 2007-12-10

OK~~ 明白了,谢谢杜江老师,哈哈, 以后还会陆续有问题请您解答哟~  望您不怕麻烦

作者: canboy365   发布时间: 2007-12-11

热门下载

更多