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 相关文章推荐
PHP入门速成(2)
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
php数组去除空值函数分享
Feb 02 PHP
PHP答题类应用接口实例
Feb 09 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
学习PHP Cookie处理函数
Aug 09 PHP
php中Redis的应用--消息传递
Mar 28 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
php写入txt乱码的解决方法
Sep 17 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP积分兑换接口实例
2015/02/09 PHP
PHP网络操作函数汇总
2015/05/18 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
python之消除前缀重命名的方法
2018/10/21 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
scrapy-splash简单使用详解
2021/02/21 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
庆元旦文艺演出主持词
2014/03/27 职场文书
大学新闻系求职信
2014/06/03 职场文书
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
工作失职自我检讨书
2015/05/05 职场文书
检察院起诉意见书
2015/05/20 职场文书
2016年清明节寄语
2015/12/04 职场文书
加强党性修养心得体会
2016/01/21 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL