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 相关文章推荐
在字符串中把网址改成超级链接
Oct 09 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
组合算法的PHP解答方法
Feb 04 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
php中explode的负数limit用法分析
Feb 27 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
php如何获取文件的扩展名
Oct 28 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
Yii2选项卡的简单使用
May 26 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
php中array_fill函数的实例用法
Mar 02 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笔记 字符串处理
2010/10/19 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
javascript实现的闭包简单实例
2015/07/17 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
解决Python requests 报错方法集锦
2017/03/19 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
Python实现感知机(PLA)算法
2017/12/20 Python
Python之文字转图片方法
2018/05/10 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
应届生保险求职信
2013/11/11 职场文书
真诚的求职信
2014/07/04 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
答谢酒会主持词
2015/07/02 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python