PHP 变量
在本教程中,我们将学习如何使用PHP变量来存储和操作数据。
定义PHP变量
变量存储任何类型的值,例如字符串、数字、数组、对象或资源。
变量有名称和值。
可以使用下面的语法来定义变量:
$variableName = value;
在PHP中定义变量时,必须遵循下面的命名规则:
- 变量的名称必须以美元符号($)开头。
- 美元符号($)后面的第一个字符必须是字母(a-z)或下划线(_)
- 变量名的字符可以是下划线、字母或者数字。
- PHP变量名是区分大小写的。这就是说$abc和$Abc变量是两个完全不同的变量。
下面的例子定义了两个整数型变量:
<?php $a = 10; $b = 20;
变量的数据类型
PHP是一种弱数据类型的编程语言。
这就是说,在定义变量时,不指定其数据类型。
PHP将根据分配给变量的值来自动为变量选择适当的数据类型。
此外,当你为变量赋予不同类型的值时,变量的数据类型也会发生变化。
请看下面的例子:
<?php $a = 20; $a = '这是一个字符串';
开始时,我们将$a变量定义为整数类型,因为我们将它的值赋值为20。
然后,我们将一个字符串赋值给$a,因此$a的数据类型现在是string而不是integer。
PHP提供了以下数据类型:
- 标量数据类型,如:整数、浮点数、字符串和布尔值。
- 复合数据类型,如:数组和对象。
- 特殊数据类型: null和resource
类型转换
PHP根据使用变量的上下文自动处理类型转换。在下面的例子中,PHP将字符串转换为数字,并使用数字进行计算:
<?php $a = 20; $b = '10'; // 字符串 $z = $a + $b; // $b 被转换为整数 echo $z; // 30
但是,出于安全原因,应该在使用变量之前将其数据类型转换为所需的数据类型。
要强制PHP按照指定类型来使用变量,可以将所需数据类型的名称放在变量前面的括号中。这就是所谓的类型转换。
请看下面的例子:
<?php $a = 20; $b = '10'; // 字符串 $z = $a + (int)$b; // $b 强制转换为整数 echo $z; // 30
请注意,$b变量的数据类型没有改变。要更改变量的数据类型,可以使用settype()函数,稍后我们将对此进行讨论。
查看变量的数据类型
PHP提供了一个内置函数gettype()用于返回变量的数据类型。
gettype()函数接受一个变量作为参数并返回它的数据类型。
下面的示例演示了如何使用gettype()函数:
<?php $int = 10; // 整数 $str = 'theITroad PHP教程'; // 字符串 $bool = true; // 布尔类型 $d = 3.14; // 浮点数 echo gettype($int), '<br>'; echo gettype($str) , '<br>'; echo gettype($bool), '<br>'; echo gettype($d), '<br>';
更改变量的数据类型
要更改变量的数据类型,请使用settype()函数。
使用settype()函数时,需要传递一个要更改数据类型和所需数据类型的变量。
settype()函数将尽可能保留变量的值。
请看示例:
<?php $f = 20.05; echo $f . '<br>'; // 浮点数 settype($f, 'integer'); echo $f . '<br>'; // 20 整数 settype($f, 'string'); echo $f . '<br>'; // '20' 字符串 settype($f, 'float'); echo $f . '<br>'; // 20 浮点数
检测变量的数据类型
PHP提供了很多有用的函数用来测试变量的数据类型。
下表列出了这些函数:
函数名 | 说明 |
---|---|
is_int($var); | 如果$var是一个整数,则返回true,否则返回false。 |
is_string($var); | 如果$var是一个字符串,则返回true,否则返回false。 |
is_bool($var); | 如果$var是一个布尔值,则返回true,否则返回false。 |
is_float($var); | 如果$var是一个浮点数,则返回true,否则返回false。 |
is_long($var); | 如果$var是长类型数,则返回true,否则返回false。 |
is_numeric($var); | 如果$var是一个数字,则返回true,否则返回false。 |
is_double($var); | 如果$var是一个双精度变量,则返回true,否则返回false。 |
is_object($var); | 如果$var是一个对象,则返回true,否则返回false。 |
is_array($var); | 如果$var是一个数组,则返回true,否则返回false。 |
变量的变量
PHP允许您引用一个变量的值,而该变量的名称存储在另一个变量中。
请看下面的例子:
<?php $foo = 'bar'; $$foo = 'this is $bar'; echo $bar; // this is $bar
首先,我们定义了一个$foo变量并为它分配了一个字符串bar。
然后,我们使用$$foo并将它分配给另一个字符串。
$foo表示bar,$$foo表示$bar变量;因此,这个赋值创建了一个新变量$bar,它的名字是$foo变量的值,也就是bar。
最后,我们显示了$bar变量的值。
设置和释放变量
当我们为一个变量赋值时,无论是字面量的值还是另一个变量的值,我们都说这个变量被设置了。
您可以使用isset()函数来检查是否设置了变量。
<?php $a; // $a 没有设置 if (isset($a)) { echo '$a is set. <br/>'; } else { echo '$a is not set. <br/>'; } $b = 20; // 给$b 赋值 if (isset($b)) { echo '$b is set. <br/>'; } else { echo '$b is not set. <br/>'; }
要释放变量,可以使用unset()函数。
下面的例子演示了如何使用unset()函数销毁变量:
<?php $a = 20; // if (isset($a)) { echo '$a is set. <br>'; } else { echo '$a is not set. <br>'; } unset($a); // $a 不再可用 if (isset($a)) { echo '$a is set. <br>'; } else { echo '$a is not set. <br>'; }
检查NULL和空值
要检查变量是否为NULL,可以使用is_null()函数。
<?php $x = null; echo is_null($x) ? '$x is null' : '$x is not null'; echo '<br />'; $x = 30; echo is_null($x) ? '$x is null' : '$x is not null';
要检查变量是否为空,可以使用empty()函数。
如果一个变量的值等于false或它不存在,则它被认为是空的。
下面的示例演示如何使用empty()函数:
<?php $x = 0; echo is_empty($x) ? '$x 为空' : '$x 不为空'; $s = ''; echo is_empty($s) ? '$x 为空' : '$x 不为空';
PHP变量的作用域
变量的作用域(作用范围)决定了脚本的哪些部分可以访问它。定义变量的位置决定了变量的作用域。
PHP中有四种类型的变量作用域:局部、全局、静态和函数参数。
局部变量
函数中定义的变量是该函数的局部变量。这就是说局部变量只能由定义它的函数中的代码访问。
请看下面的例子:
<?php function foo() { $a = 10; $a = $a + 20; return $a; }
变量$a是foo()函数中的一个局部变量。它不能在foo()函数之外被访问。
全局变量
在函数外部声明的变量具有全局作用域或称为全局变量。
全局变量可以从程序的任何部分访问。
但是,默认情况下,它在函数内部不可用。要在函数内部引用全局变量,需要在声明变量时使用global关键字,如下所示:
<?php $x = 10; function test() { global $x; echo $x; //10 } test();
超全局变量
PHP提供了一个系列特殊的全局变量,称为超全局变量superglobal。
超全局变量提供关于PHP脚本环境的信息。超级全局变量在任何PHP脚本文件中都自动可用。
下面是PHP的超全局变量列表:
$GLOBALS 是一个包含全局变量的数组。
$_SERVER 包含有关web服务器环境的信息。
$_ENV 包含有关脚本环境的信息。
$_GET 包含来自GET请求的信息。
$_POST 包含来自POST请求的信息。
$_REQUEST 包含用户的请求信息。
$_SESSION 包含来自会话中注册的任何变量的信息。
$_COOKIE 包含来自HTTP cookies的信息。
$_FILES 包含文件上传后的信息。
静态变量
静态变量在函数调用之间保留其值,并且它只能在该函数内部访问。
使用static关键字定义静态变量。例如:
<?php function set_counter() { static $counter = 0; $counter++; echo $counter . '<br/>'; } set_counter(); // 1 set_counter(); // 2 set_counter(); // 3
函数参数
函数的参数是局部的,它们只能在函数内部可见。请看以下示例:
<?php function to_html($str) { // }
$str是to_html()函数的参数。它只在to_html()函数中可用。