PHP 第三节 变量介绍
前端之家收集整理的这篇文章主要介绍了
PHP 第三节 变量介绍,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z\x7f-\xff][a-zA-Z0-9\x7f-\xff]'。 Note: $this 是一个特殊的变量,它不能被赋值。 变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。有关这种类型的赋值操作,请参阅表达式一章。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。 使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。 有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。
<div class="codetitle"><a style="CURSOR: pointer" data="25764" class="copybut" id="copybut25764" onclick="doCopy('code25764')"> 代码如下:
<div class="codebody" id="code25764">
<?
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)。静态变量仅在局部
函数域中存在,但当程序执行离开此作用域时,其值并不丢失。