浅析php中常量,变量的作用域和生存周期

在PHP脚本中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等等,我们在使用它们的时候除了要正确地知道它们的语法以外,更重要的是,我们要知道它们在本质上的区别与联系—即它们的作用域的问题。

1.内置超级全局变量可以在脚本的任何地方使用和可见。即是说,如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。

2.常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面之中就不能使用了。

3.在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。

4.函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。

5.在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。

6.在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。

超级全局变量的完整列表如下:
1.$GOBALS  所有全局变量数组
2.$_SERVER  服务器环境变量数组
3.$_POST  通过POST方法传递给该脚本的变量数组
4.$_GET  通过GET方法传递给该脚本的变量数组
5.$_COOKIE  cookie变量数组
6.$_FILES  与文件上传相关的变量数组
7.$ENV 环境变量数组
8.$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE 所包含的输入内容
9.$_SESSION  会话变量数组

我们要注意的是:变量和常量另一个重要的差异是:常量只可以定义boolean(布尔型),integer(整型),float(浮点型) 和 string(字符串型)数据,但不能定义 resource类型的数据。

(0)

相关推荐

  • PHP之变量、常量学习笔记

    有关变量的传地址赋值 PHP 3 中,变量总是传值赋值.PHP 4 提供了另外一种方式给变量赋值:传地址赋值.使用传地址赋值,即简单地追加一个(&)符号到将要赋值的变量前(源变量).这意味着新的变量简单的引用了原始变量,改动新的变量将影响到原始变量,反之亦然. <?php $foo = 'Bob'; $bar = &$foo; $bar = "My name is $bar"; echo $bar; echo $foo;  ?> 变量foo只在首行被赋值,正

  • php中的注释、变量、数组、常量、函数应用介绍

    php中单引号与双引号的区别? 1. 由下可看出,双引号的变量是解析并输出,而单引号的变量不解析. 2.单引号的解析速度比双引号的快 3. 对于单引号来说,只有两个转义 \',\\ 4. 除了上述两个转义字符,其他都原样输出. 5. 对于双引号来说,可转义字符除\\,\',\"之外,还有\t, \r , \n 等 6.除了单引号和双引号用来声明字符串变量外,还有heredoc方式 程序代码: //$age = 22; //$str1 = '他今年 $age 岁'; //''原样输出 //$str

  • PHP 判断常量,变量和函数是否存在

    复制代码 代码如下: if (defined('CONST_NAME')) {    //do something } 变量检测则是使用isset,注意变量未声明或声明时赋值为NULL,isset均返回FALSE,如: 复制代码 代码如下: if (isset($var_name)) {    //do something} 函数检测用function_exists,注意待检测的函数名也需要使用引号,如: 复制代码 代码如下: if (function_exists('fun_name')) {

  • PHP输出当前进程所有变量/常量/模块/函数/类的示例

    1. get_defined_vars  (PHP 4 >= 4.0.4, PHP 5) - 获取由所有已定义变量所组成的数组array get_defined_vars ( void )此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量.服务器变量和用户定义的变量. 复制代码 代码如下: <?phpecho '<pre>';$b = array(1,1,2,3,5,8);$arr = get_defined_vars();// 打印 $bprint_r($arr

  • thinkphp中常用的系统常量和系统变量

    ----------------------------------------模板中使用的系统变量和常量----------------------------------------(1)系统变量:在模板中输出系统变量:包括server.env.session.post.get.request.cookie      {$Think.server.script_name} // 输出$_SERVER变量{$Think.session.session_id|md5} // 输出$_SESSIO

  • php 静态变量与自定义常量的使用方法

    ⚑ 静态变量的声明与使用 ⚑ 自定义常量的使用方式 什么是静态变量? 静态变量是指用static声明的变量,这种变量与局部变量的区别是,当静态变量离开了它的作用范围后,它的值不会自动消亡,而是继续存在,当下次再用到它的时候,可以保留最近一次的值. 下面举例: 复制代码 代码如下: <?php function add() { static $i=0; $i++; echo $i; } add(); echo " "; add(); ?> 这段程序中,主要定义了一个函数add

  • php的常量和变量实例详解

    php的常量和变量实例详解 [PHP在命令行下接收参数] 如果在命令行调试php,传入的参数通过$argv获取,注意其中包含了文件名这一个元素,数组中元素的个数通过$argc获取. [可变变量] 指的是变量的名称可变,变量的标识符可以由另一个变量的值来代替. 例如:第二个语句是为argv1这个变量赋值. <?php $varName = 'argv1'; $$varName = 'value1'; var_dump($argv1); ?> [常量] 使用define定义,不可删除和修改,调用时

  • 浅析php中常量,变量的作用域和生存周期

    在PHP脚本中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等等,我们在使用它们的时候除了要正确地知道它们的语法以外,更重要的是,我们要知道它们在本质上的区别与联系-即它们的作用域的问题. 1.内置超级全局变量可以在脚本的任何地方使用和可见.即是说,如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变. 2.常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和incl

  • Python中的变量和作用域详解

    作用域介绍 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:globa,全局变量,就是模块级别定义的变量: B:built-in,系统固定模块里面的变量,比如int, bytearray等. 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB. x = int(2.9) # int bu

  • 浅析JavaScript中的变量提升

    目录 前言: 函数提升 var变量提升 let & const提升 Class提升 前言: JavaScript中奇怪的一点是你可以在变量和函数声明之前使用它们.就好像是变量声明和函数声明被提升了代码的顶部一样. sayHi() // Hi there! function sayHi() { console.log('Hi there!') } name = 'John Doe' console.log(name) // John Doe var name 然而JavaScript并不会移动你的

  • 浅析JavaScript中的变量复制、参数传递和作用域链

    今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执行环境.变量对象.作用域链. 1.变量 变量需要注意的有两点:变量声明和复制变量值. 变量声明肯定大家都很熟悉,在JS中我们都是通过 var 关键字进行变量声明的.JS中规定,通过var声明的变量会被添加到最近的环境中,如果声明并且初始化一个变量没有用到var关键字,这个变量会被添加到全局环境中.

  • 简单谈谈javascript中的变量、作用域和内存问题

    [变量] [1]定义:可变的量,相当于给一个不定的数据起了一个外号.变量是存储信息的容器. [2]特性:js中的变量是松散类型的,可以保存任何类型的数据.它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. [3]变量声明:变量可以在声明时赋值,但不能有其他操作,如+=.-=等 var a = 2;//是正确的 var a += 2;//是错误的 var a = 2++;//是错误的,++只能用于变量

  • 深入理解JS中的变量及作用域、undefined与null

    1.Javascript变量作用域 javascript中,变量主要分为局部变量和全局变量两种,对应的作用域也是局部作用域和全局作用域. 1 局部变量和作用域 局部变量一般在函数体内部声明使用: function func(){ var i=12;//局部变量 ...... } 局部变量的作用域在声明这个变量的函数体范围内使用. 局部变量的声明周期从函数被调用执行开始初始化,在函数调用执行完毕之后被销毁. 2.全局变量和作用域 全局变量一般在函数体外面声明: var i=12;//全局变量 fu

  • Javascript中的变量使用说明

    javascript中的所有变量都是类型松散的,不同于其他面向对象语音的变量声明都是强类型的.因此Javascript 的变量声明是不包括类型的.通过var关键字或者直接写变量名来声明一个变量,如: var v = 1; v=1; 这时有人可能会问,上述的两种声明有什么区别,为什 么会有这两种不同的声明方式,这就涉及到javascript中变量的作用域了.在javascript中,变量的作用域包括全局和函数级别的. 全局变量可以声明在函数体外,无论使用上述的哪种声明方式,在函数体外 声明的变量都

  • Java的访问修饰符与变量的作用域讲解

    Java访问修饰符(访问控制符) Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] arguments)

  • 深入理解JavaScript中的块级作用域、私有变量与模块模式

    本文详细的介绍了JavaScript中的块级作用域.私有变量与模块模式,废话就不多说了,具体如下: 1.块级作用域(私有作用域),经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数. (function(count){ for(var i=0;i<count;i++){ console.log(i);//=>0.1.2.3.4 } console.log(i);//=>5 })(5); (function(){ var now=new Date(); if(no

  • 浅析Nginx配置文件中的变量的编写使用

    nginx 的配置文件使用的就是一门微型的编程语言,许多真实世界里的 Nginx 配置文件其实就是一个一个的小程序.当然,是不是"图灵完全的"暂且不论,至少据我观察,它在设计上受 Perl 和 Bourne shell 这两种语言的影响很大.在这一点上,相比 Apache 和 Lighttpd 等其他 Web 服务器的配置记法,不能不说算是 Nginx 的一大特色了.既然是编程语言,一般也就少不了"变量"这种东西(当然,Haskell 这样奇怪的函数式语言除外了).

随机推荐