PHP 第三节 变量介绍


Posted in PHP onApril 28, 2012

变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'。

Note: $this 是一个特殊的变量,它不能被赋值。

变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。有关这种类型的赋值操作,请参阅表达式一章。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。

使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。

有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。

<?php 
$foo = 25; 
$bar = &$foo; // 合法的赋值 
$bar = &(24 * 7); // 非法; 引用没有名字的表达式 
function test() 
{ 
return 25; 
} $bar = &test(); // 非法 
?>

虽然在 PHP 中并不需要初始化变量,但对变量进行初始化是个好习惯。未初始化的变量具有其类型的默认值 - 布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量默认值是空字符串或者数组变量的默认值是空数组。

依赖未初始化变量的默认值在某些情况下会有问题,例如把一个文件包含到另一个之中时碰上相同的变量名。另外把 register_globals 打开是一个主要的安全隐患。使用未初始化的变量会发出E_NOTICE错误,但是在向一个未初始化的数组附加单元时不会。isset() 语言结构可以用来检测一个变量是否已被初始化。

预定义变量
PHP 提供了大量的预定义变量。由于许多变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运行时并不生效。

从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。(PHP 中没有用户自定义超全局变量的机制。)超全局变量罗列于下文中;但是为了得到它们的内容和关于 PHP 预定义变量的进一步的讨论以及它们的本质,请参阅预定义变量。而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自 PHP 5.0.0 起, 用 register_long_arrays 设置选项可禁用 长类型的 PHP 预定义变量数组。

变量范围
变量的范围即它定义的上下文范围(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。

PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。而PHP中的局部变量不会被全局变量覆盖,如果使用会是变量的缺省初始值。这可能引起一些问题,有些人可能不小心就改变了一个全局变量。PHP 中全局变量在函数中使用时必须申明为global。

使用静态变量
变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

PHP 相关文章推荐
Phpbean路由转发的php代码
Jan 10 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
tp5修改(实现即点即改)
Oct 18 PHP
PHP 第二节 数据类型之转换
Apr 28 #PHP
PHP 第二节 数据类型之数组
Apr 28 #PHP
PHP 第二节 数据类型之字符串类型
Apr 28 #PHP
PHP 第二节 数据类型之数值型
Apr 28 #PHP
PHP 第一节 php简介
Apr 28 #PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 #PHP
php实现rc4加密算法代码
Apr 25 #PHP
You might like
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
TypeScript入门-接口
2017/03/30 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
简介Django中内置的一些中间件
2015/07/24 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
党的生日活动方案
2014/08/15 职场文书
材料员岗位职责范本
2015/04/11 职场文书
大学团日活动总结书
2015/05/11 职场文书
婚育证明格式
2015/06/17 职场文书
国庆节新闻稿
2015/07/17 职场文书
Java中的Kotlin 内部类原理
2022/06/16 Java/Android