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

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. ie6不认识

    1.   ie6 不认识这样连续写的类选择 .class1.class2{  } 2.   ie6 下不解析 css  input[type="text"] 等等类别的选择

  2. Get Docker CE for Ubuntu

    Docker 分为开源免费的 CE(Community Edition)版本和收费的 EE(Enterprise Edition)版本. 配置 Docker 的 apt 源 1. 安装包,允许 apt ...

  3. POJ 1068 Parencodings (类似括号的处理问题)

                                                                                                    Pare ...

  4. 字典树 HDU 1251 统计难题

    ;} 之前写的#include<iostream> #include<algorithm> #include<stdio.h> using namespace st ...

  5. linux shell 编程(一)

    脚本:命令的堆砌,按照实际需要结合命令流程控制机制实现的源程序 linux 内核只能识别 elf格式的文件(可执行的可链接的文件) 脚本的第一行写 #!/bin/bash 表示脚本解释器

  6. 用 CSS3 创建一个漂亮的多种色彩的菜单

    1. [图片] thumb.png ​2. [代码][HTML]代码 <!DOCTYPE html><html lang="en" >    <hea ...

  7. 解析XML(3)

    SAXReader reader = new SAXReader(); Document doc = reader.read(new FileInputStream("emplist.xml ...

  8. ZSetOperations

    有序集合,默认按照score升序排列,存储格式K(1)==V(n),V(1)=S(1)(K=key,V=value,S=score) 1.add(K,V,S):添加 2.count(K,Smin,Sm ...

  9. C# Task的用法

    C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...

  10. 使用JQuery,动态增加列

    这也是我在自己学做网站时无意搞出来的,希望可以对别人有所启发 <%@ page language="java" import="java.util.*" ...