变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围。
如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:
php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是:
只能在函数内部使用。
php中的全局变量指的是:在函数外部定义,一般来说只能在函数外部被访问,
不能直接在函数内部可见的变量;
而局部变量指的是:在函数内部定义,只能在函数内部访问的变量。
$name = "csc";
function test(){
echo $name; //运行该脚本则会提示:Undefined variable: name未定义的变量name.
}
test();
由上可知,在函数内部不能直接访问函数外部定义的变量。当然也只是不能直接访问,肯定有间接访问的办法:
php提供了一个global关键字,在函数内部用global声明函数外部的全局变量之后,便可在函数内部访问全局变量了:
$name = "csc";
function test(){
global $name;//在函数中用global声明了全局变量$name之后,对该变量的所有引用都会指向其全局版本。
echo $name; //正常输出$name的值'csc'
}
test();
若是出现同名的全局变量与局部变量呢?
$name = "csc";
function test($name){
echo $name,'<br/>'; //当前只有局部变量$name可见,输出'dqr';
global $name; //声明现在开始$name是全局变量的$name,而非局部变量$name了
echo $name,'<br/>'; //当前$name指向的是全局版本的$name,输出'csc'
$name = 'dqrcsc'; //修改的是全局变量版本的$name
}
test('dqr');
echo $name; //在test()内部被修改,输出'dqrcsc'

php中实际上还存在另一种作用域:超全局作用域,只看名字就知道比全局作用域NB了。
超全局作用域:在函数内外都可见,一般用于php系统预定义的变量。如:$GLOBALS,$_GET,$_COOKIE等等都是所谓的
超全局变量。也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。
不需要在函数或方法中用 global $variable; 来访问它。
这是就出现了另一种在函数内部访问全局变量的方法:
$name = "csc";
function test(){
echo $GLOBALS['name']; //正常输出$name的值'csc'
}
test();
当然,实质上访问的是超全局变量$GLOBALS,并不是直接访问全局变量$name。
此时,若是出现同名的全局变量与局部变量呢?
$name = "csc";
function test($name){
echo $name,'<br/>'; //当前只有局部变量$name可见,输出'dqr';
echo $GLOBALS['name']; //访问的是全局变量$name,而非局部变量,输出'csc'
}
test('dqr');

php学习笔记4--php中的变量作用域的更多相关文章

  1. python学习笔记三:函数及变量作用域

    一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...

  2. shell学习笔记1: shell 中的变量与常见符号使用方法

    变量 声明即用 a=2 b="123" 调用 ${varName}或者 $varName echo $b echo ${a} 常见变量 $?:判断上一个语句是否成功 $0:执行脚本 ...

  3. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring中Bean的作用域

    作用域的种类 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域.Spring3 为 Bean 定义了五种作用域,具体如下. 1)singleton 单例模式,使用 sing ...

  4. 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理

    (1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...

  5. Flutter学习笔记(3)--Dart变量与基本数据类型

    一.变量 在Dart里面,变量的声明使用var.Object或Dynamic关键字,如下所示: var name = ‘张三’: 在Dart语言里一切皆为对象,所以如果没有将变量初始化,那么它的默认值 ...

  6. (转)Python学习笔记(1)__name__变量

    Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行.每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行.为了区分 主执行代码和被调用文件,Python引入 ...

  7. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  8. [学习笔记] 在Eclipse中导入项目

    参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.

  9. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  10. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中

    前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...

随机推荐

  1. radvd.conf RADVD配置文件内容部分解析

    interface eth0{ AdvSendAdvert on; #启用路由器公告(RA)功能 MinRtrAdvInterval ; #每隔30-100秒间隔发送公告消息 MaxRtrAdvInt ...

  2. 用python写makefile

    温馨提示:阅读本文的同学最好能了解makefile和python的编写规则. 不懂的同学能够先保存在收藏夹.以便日后查看. 事实上之前我一直非常懒,我不想了解makefile规则.由于在linux下开 ...

  3. 【原创】AltiumDesigner 6 的自定义菜单

    AltiumDesigner 6 的自定义菜单,数据保存在DXP.RCS文件中通过测试,添加一个自定义菜单名为HHH,然后用Editplus在C:\Users\pcittsy\AppData\Roam ...

  4. $(document).ready()使用讨论

    <script language="JavaScript" type="text/javascript"> $(document).ready(fu ...

  5. jquery easyui from 表单返回乱码!

    如果用easyui的form进行提交,必须在<form>标签中加入属性method="post",即<form method="post"&g ...

  6. 深入了解android平台的jni---图像灰度化处理

    一.涉及到的jni编程知识 Java基本类型的数组,在JNI中都是jArray的类型格式.具体类型如下: typedef jarray jbooleanArray; typedef jarray jb ...

  7. MPI编程简单介绍

    第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...

  8. SQL Server事务日志介绍

    SQL Server中的数据库都是由一或多个数据文件以及一或多个事务日志文件组成的. 顾名思意,数据文件主要存储数据库的数据,包括数据库内容结构,数据页,索引页等等.那么事务日志到底是干什么的呢?它主 ...

  9. 小凡的Linux主机与时间服务器同步记录

    小凡的Linux主机与时间服务器同步记录 导读 我们新安装的Linux主机,如果没有做与互联网服务器时间同步的处理的话,当我们使用date命令的时候,我们就看不到当前的时间,只能看到过去的时间.在我们 ...

  10. WPF 之 左键弹出操作菜单,并禁用右键菜单

    在目前的WPF版本中,很多的控件都有一个ContextMenu的属性,可以设置组件的右键菜单,这点确实是很方便,但是有些时候我们可能会需要当单击鼠标左键才弹出这个ContextMenu,而不是单击鼠标 ...