资讯专栏INFORMATION COLUMN

php global 全局变量小谈

Lionad-Morotar / 1886人阅读

摘要:的全局变量看起来很好用,但稍有不慎,很容易被套住。比如如果一个简单的配置文件如下当我们想要使用这个的时候,都知道使用就行了。没错,这样可以。

php 的全局变量看起来很好用,但稍有不慎,很容易被套住。

比如: 如果一个简单的php配置文件如下:

$name="Yi_Zhi_Yu";

当我们想要使用这个$name的时候,都知道使用include就行了。没错,这样可以。但假如我想把这个$name作为一个全局变量使用,以方便统一修改呢

也容易:

include("./config.inc");
global $name;
echo $name; //Yi_Zhi_Yu

那么问题来了,假如某个函数里我要用这个全局变量呢,或许你会这么写

function test()
{
    include("./config.inc"); //这里加载是错误的
    global $name;
    var_dump($name);
}
test();

Sorry, 你这样是得不到这个变量值得,得到的仅仅是个null

这就是我在实际中遇到的一个坑,即文件加载的全局变量的初始化只能在整个脚本的最外层,我说的最外层是指不能被包含在任何的函数体或者类里面

include("./config.inc"); //最外层初始化全局变量
function test()
{
    global $name; //使用的时候定义其全局属性
    echo $name; //Yi_Zhi_Yu
}
test();

那再来一个问题,一个在test里面被定义了全局属性的变量(假设$age=25),假如在外面被修改了值($age=27),然后这个变量($age)再在另一个函数中调用,这个时候的这个$age应该是哪个值呢,代码如下,是被初始化的时候值(25),还是在外面被修改了的值(27)呢。

function test()
{
    global $age;
    $age=25;
}
function test2()
{
    global $age;
    var_dump($age); //这个值应该是什么?
}

test();
var_dump($age);
$age=27;
test2();

没错,这个值应该是27, 这就是全局变量,只不过这种定义和初始化都是在一个函数体内完成的(不过这种方式不推荐,一般都是在最上面我说的配置文件中初始化的,只在使用的时候定义其全局属性,但不会在代码中修改其值,仅仅作为配置项获取)。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30219.html

相关文章

  • workerman / 小谈PHP中的几种运行模式

    摘要:话说当下一共有种运行模式,分别是和模块模式。使用,全称进程管理器进行管理。工作原理启动时载入进程管理器进程管理器自身初始化,启动多个解释器进程并等待来自的连接当客户端请求到达时,进程管理器选择并连接到一个解释器。 我们知道 workerman 程序需要在php-cli模式下运行,也就是命令行模式,这块我们有必要了解一下。 话说PHP当下一共有4种运行模式,分别是CGI、FastCGI、...

    darkbaby123 评论0 收藏0
  • python classmethod 与 staticmethod 小谈

    摘要:而类的实例并不会影响类的静态变量,只是会修改对象实例本身的值,所以后面两个的结果总是同样,如果我们使用和结果也将仅仅是静态变量变化后的结果,与类的实例无关以上是对和的暂时做的了解的总结,如有纰漏,请及时指正 概念 python 的classmethod 与staticmethod 这两个有什么区别? 二者又有什么联系?在google和baidu之后, 得到的大致的联系就是二者都是对类的...

    keke 评论0 收藏0
  • PHP7扩展开发(二):配置项与全局数值

    摘要:起步引擎提供了另种管理设置值的途径。假设我们需要为我们扩展定义一个值并用函数返回它的内容。在为了避免命名空间的冲突,我们扩展的名字作为所有值的前缀。仅仅是一种约定,一个句点用来分隔扩展名和说明性的初始设定名字。 起步 Zend引擎提供了另种管理设置值(INI)的途径。现在弄个简单的,我们经常看到php.ini里有诸如 display_errors = On 这样的全局设置。假设我们需要...

    Mr_houzi 评论0 收藏0
  • PHP 进阶之路 - 揭开 PHP 线程安全的神秘面纱

    摘要:如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。为解决线程的并发问题,引入了线程安全资源管理器。的全拼,用来存放各个线程的链表。 PHP 进阶之路 - 零基础构建自己的服务治理框架(上) PHP 进阶之路 - 零基础构建自己的服务治理框架(下) PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 PHP 进阶之路 - 亿级 pv 网站架构实战之性能压榨 注...

    pepperwang 评论0 收藏0
  • SG :一个简单的PHP语法糖扩展

    摘要:本文介绍笔者自己写的语法糖扩展,扩展了一种全新的超全局变量获取方式。优秀的语法糖,应该是一种灵魂思想的注入,简单写法的应用。非常重要的一点是它很简单项目背景这个出发点很简单,从扩展名称我们应该能猜到它是做什么的。 奇技指南语法糖往往给程序员提供了更实用的编码方式,可以使代码更简洁流畅,语义更自然。本文介绍笔者自己写的PHP语法糖扩展,扩展了一种全新的PHP超全局变量获取方式。本文作者...

    warkiz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<