这个东西很难理解,但很重要,我觉得非常容易出错。

PHP中的变量按照作用域分为有两种,一种是global,一种是local。

函数内部声明的变量就叫local型变量,只能在函数内部被访问到。一句话,local型变量只能在函数内部定义以及引用。

函数外部声明的变量叫global型变量,只能在函数的外部访问到(除了GLOBALS)。这种渣渣也能叫global,真是名不副实啊!我记得以前学习过的语言不是这个样子的,只要是global,函数外还是函数内都可以访问到的,但php就是这么难搞。

我们看一个local的例子。

 <?php

 $name = 'hanmeimei';
function getName(){
echo $name;
} getName(); ?>

运行结果显示$name这个变量没有被定义。是因为php解析器没有在getName函数内部找到$name这个变量的定义。为啥不去外面找去啊,如果没有特别的声明,函数内部引用到的变量只会在函数内部去找它的定义。

那怎么才能访问到外面的name呢?

我们看一个global的例子。

 <?php
$name = "hanmeimei";
function getName(){
global $name;
echo $name;
}
getName();
?>

这回就没有错误提示了,为什么呢?是因为在getName函数内部有一句global $name,它的意思是告诉PHP解析器$name这个变量的定义你得在函数外面找,然后就找到了$name的值是hanmeimei。变量前面的global使得$name这个global型变量的作用范围扩大到了getName函数内部。

前面有句话:函数外部声明的变量叫global型变量,只能在函数的外部访问到,这是什么意思?

 <?php
$name = 'hanmeimei';
echo $name;
?>

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

  1. JavaScript高级程序设计学习笔记--变量、作用域和内存问题

    传递参数 function setName(obj){ obj.name="Nicholas"; obj=new object(); obj.name="Greg&quo ...

  2. R语言学习笔记-变量的作用域

    R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示 ...

  3. javascript学习笔记 - 变量、作用域和内存问题

    一 垃圾收集 javascript具有自动垃圾收集机制.由垃圾收集机制标找出不再使用的变量.按照固定间隔的时间进行销毁,释放内存.  1.找出不再使用的变量的方法,如下: 1-1.标记清除 垃圾回收器 ...

  4. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  5. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

  6. ES6 学习笔记之一 块作用域与let和const

    ---恢复内容开始--- 在学习ES6的块作用域和 let.const 之前,我们先来看看ES5以前的 var 关键字. var 关键字用于定义一个变量,通常我们会将其与变量的赋值合并为一条语句,就像 ...

  7. C++ 学习笔记 变量和基本类型(一)

    C++ 学习笔记 一.变量和基本类型概述 类型是所有程序的基础.类型告诉我们数据代表什么意思以及可以对数据执行哪些操作. c++基本类型: 字符型 整型 浮点型 c++ 还提供了可用于自定义数据类型的 ...

  8. Python学习之变量的作用域

    学习地址:http://www.jianshu.com/p/17a9d8584530 1.变量作用域LEGB 1.1变量的作用域 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空 ...

  9. JavaScript笔记:变量及其作用域

    一.变量的定义及声明 在javascript中变量仅仅是用来保存值的一个占位符而已,定义变量时要使用关键字var后跟一个变量名,如下所示: var message; //定义一个变量message,像 ...

随机推荐

  1. ssh允许root用户登陆

    新的系统无root用户密码,设置root用户密码,修改也是这么修改 sudo passwd root 连续输入两次新密码. 允许root用户登陆: /etc/ssh/sshd_config 找到 Pe ...

  2. linux bash缓存

    http://www.xuebuyuan.com/296675.html 在已经运行的系统中更改了某些以前存在于PATH环境变量所指明的目录中的程序的存放目录后可能出现No such file or ...

  3. 在Treeview中节点的data属性中保存记录类型及其消除的办法

    一.保存记录类型在data指针中: procedure TForm1.getheaditems(pp:TfrxBand;hnode:THeadTreeNode;var i:Integer;var j: ...

  4. HTML特效文字代码大全

     HTML特效文字代码大全一.从右向左移代码<marquee direction=left>需要移动的文字</marquee>二.从左向右移代码<marquee dire ...

  5. 织梦dedecms 扩展channel栏目标签 获取交叉栏目名称和链接

    channel栏目标签默认有调用顶级栏目(top).子栏目(son).同级栏目(self),那想获取交叉栏目的名称和链接怎么获取呢? 其实在原来的代码上改一下就可以了.下面是具体代码.打开文件chan ...

  6. mysql学习笔记1

  7. codevs1997 守卫者的挑战

    题目描述 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突 然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者. ...

  8. Linux- 运维

    Linux运维遇到需要使用命令 查看Linux系统有多少用户 cat /etc/passwd | wc -l 查看用户占用的uid,默认情况下,ldap新增的用户和系统本地的用户uid是混在一起.在新 ...

  9. linux 文件存取 软硬联接的区别

    一.linux文件存取过程 在linux系统中根目录是自引用的,比如要找 /etc/sysconfig/networkscripts/ifcfg-0文件 先根据根目录/ 的inode号,在inode ...

  10. django使用bootstrap前端框架

    一.下载bootstrap相关文件,放在项目目录中.在blog 应用中新建static目录,bootstrap文件放在此目录下. bootstrap下载网址:http://v3.bootcss.com ...