php学习笔记4--php中的变量作用域
变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围。
如同其他语言,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中的变量作用域的更多相关文章
- python学习笔记三:函数及变量作用域
一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...
- shell学习笔记1: shell 中的变量与常见符号使用方法
变量 声明即用 a=2 b="123" 调用 ${varName}或者 $varName echo $b echo ${a} 常见变量 $?:判断上一个语句是否成功 $0:执行脚本 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring中Bean的作用域
作用域的种类 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域.Spring3 为 Bean 定义了五种作用域,具体如下. 1)singleton 单例模式,使用 sing ...
- 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理
(1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...
- Flutter学习笔记(3)--Dart变量与基本数据类型
一.变量 在Dart里面,变量的声明使用var.Object或Dynamic关键字,如下所示: var name = ‘张三’: 在Dart语言里一切皆为对象,所以如果没有将变量初始化,那么它的默认值 ...
- (转)Python学习笔记(1)__name__变量
Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行.每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行.为了区分 主执行代码和被调用文件,Python引入 ...
- Web安全学习笔记 SQL注入中
Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...
- [学习笔记] 在Eclipse中导入项目
参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中
前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...
随机推荐
- How to log in to Amazon EC2 using PEM format from SecureCRT
SecureCRT requires both a private and a public key. Use the supplied key.pem file from EC2 here as y ...
- C#如何通过NCO3.0来连接SAP并调用SAP中的RFC
,这是SAP针对.Net开发的专用组件,安装完成之后在C:\Program Files\SAP\SAP_DotNetConnector3_x86目录下面会有sapnco_utils.dll sapnc ...
- Codeforces Gym 100463E Spies 并查集
Spies Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Desc ...
- 手把手教你使用 Imagepro plus - 宏操作【转】
Imagepro plus操作5 – 提高测量效率的必须技术-宏操作(续) 星期三, 七月 7th, 2010 | 图像分析 | hbchendl | 浏览:897 请先参阅:Imagepro plu ...
- 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号
一.半双工管道(pipe) 关于管道详细介绍可参考http://www.cnblogs.com/nufangrensheng/p/3560130.html. 1.管道实现父子进程间通信实例: /* p ...
- redis的实现过程
1下载redis的安装包并按照操作安装 2开启 右击我的电脑→管理→服务→站到redis service服务 将其开启 注意:redis服务开启后其默认的ip和端口号为127.0.0.1:6379 3 ...
- 如何让静态库中的可执行程序不调用的函数不链接进该可执行程序?(-ffunction-sections -Wl,--gc-sections)
关键词: -Wl,--gc-sections -ffunction-sections 链接 elf 库 有时我们会遇到这种情况,可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使 ...
- BootStrap2学习日记19---缩略图
缩略图 代码: <ul class="thumbnails"> <li class="span3"><a href="# ...
- BootStrap2学习日记17---导航路径和分页
导航路径 代码: <ul class="breadcrumb"> <li><a href="#">Home</a> ...
- 从零开始学JAVA(06)-WebService_Jersey_Restful
由于项目上需要写一个简单的评价系统,像银行MM前面的那种非常满意.满意.不满意那种,结合一个安卓的APP一起使用.由于使用3G网页通讯,个人认为http这种方式更合适.曾经听在Delphi鸟窝群的白雪 ...