在PHP程序中存储信息的主要方法是使用变量。以下是关于PHP中变量的最重要的知识。
- PHP中的所有变量都用一个前导的美元符号(
$
)表示。 - 变量的值是最近赋予的值。
- 变量赋值使用
=
运算符,左边的变量被赋予右边的表达式的值。 - 变量不需要在赋值之前声明。
- PHP中的变量没有内在的类型 - 变量使用前不要关心它用来存储的是一个数字还是一串字符。
- 分配之前使用的变量所具有默认值。
- PHP在自动将类型从一个类型转换为另一个类型也没有问题。
- PHP变量与Perl中的变量是相似的。
PHP中共有八种数据类型,我们用它来构造变量 -
- 整数 - 是整数,没有小数点,例如:
123
,889
等。 - 双精度 - 是浮点数,如
3.14159
或69.1
。 - 布尔值 - 只有两个可能的值是:
True
或False
。 - NULL - 是一个只有一个值的特殊类型:
NULL
。 - 字符串 - 是字符序列,如:
"abc123"
,"PHP支持字符串操作"
等。 - 数组 - 是其他值的命名和索引集合。
- 对象 - 是程序员定义的类的实例,它可以打包特定于类的其他类型的值和函数。
- 资源 - 是特殊变量,用于存放对PHP外部资源的引用(如数据库连接)。
前五种称为简单类型,后两种(数组和对象)称为复合类型 - 复合类型可以包装其他任意类型的任意值,而简单类型则不能。
我们将在本章中仅解释简单的数据类型。而数组和对象 将分开解释。
1. 整型
整型是整数,它们没有小数点,如2218
。它们是最简单的类型,它们对应于简单的整数,包括正数和负数。 整数可以分配给变量,也可以用在表达式中 -
<?php
$int_var = 2212;
$another_int = -2212 + 3578;
整数可以是十进制(10进制),八进制(8进制)和十六进制(16进制)格式。 十进制格式是默认值,八进制整数用前导0
来指定,而十六进制有一个前导0x
。
对于最常见的平台,最大的整数是(2 ** 31-1
或2147483647
),最小的整数是(-2 ** 31-1
或-2147483647
)。
2. 双精度
双精度的值类似于3.14159
或249.21
这样的浮点值。 默认情况下,双精度打印需要最小小数的位数。例如下面代码 -
<?php
$double1 = 2.2888800;
$double2 = 2.2111200;
$double3 = $double1 + $double2;
print("$double1 + $double2 = $double3 ");
?>
执行上面示例代码,得到以下结果 -
2.28888 + 2.21112 = 4.5
3. 布尔类型
布尔类型只有两个可能的值,即:TRUE
和FALSE
。PHP提供了几个常量来用作布尔值:TRUE
和FALSE
,可以像这样使用 -
<?php
if (TRUE)
print("This will always print<br>");
else
print("This will never print<br>");
?>
将其他类型解释为布尔值
以下是确定布尔类型中任何值的“真值”的规则 -
- 如果该值是一个数字,那么如果完全等于零则为假,否则为真。
- 如果值是一个字符串,如果字符串为空(字符为零个)或字符串为
"0"
,则为false
,否则为true
。 NULL
类型的值总是为false
。- 如果该值是一个数组,如果它不包含,那么它的值是
false
,否则是true
。 对于包含值的对象,意味着它拥有一个已经赋值的成员变量。 - 有效的资源是
true
(尽管一些成功返回资源的函数在失败时会返回FALSE
)。 - 不要使用双精度(
double
类型)作为布尔值。
当在布尔上下文中使用时,以下代码每个变量都具有嵌入其名称中的真假值。
<?php
$true_num = 3 + 0.14159; // 真值
$true_str = "Tried and true"; // 真值
$true_array[49] = "An array element";// 真值
$false_array = array(); // 假值
$false_null = NULL; // 假值
$false_num = 999 - 999; // 假值
$false_str = ""; // 假值
?>
4. NULL值
NULL
是一个只有一个值的特殊类型:NULL
。要给一个变量赋予NULL
值,可以像下面这样分配它 -
<?php
$my_var = NULL;
常量NULL
特殊常量大写,但实际上是不区分大小写的; 也可以这样书写 -
<?php
$my_var = null;
已分配NULL
值的变量具有以下属性 -
- 它在布尔上下文中评估求值为
FALSE
。 - 当使用
isset()
函数进行测试时,它将返回FALSE
。
5. 字符串
它们是字符序列,如"PHP支持字符串操作"
。以下是字符串的有效示例:
<?php
$string_1 = "这是一个双引号的字符串";
$string_2 = '这是一个稍长的单引号字符串';
$string_11 = "这个字符串有11个字符";
$string_0 = ""; // 一个字符串为零的字符串
$a = 10;
$b = 20;
$sum = $a + $b;
$string = "$a + $b = $sum"; // 输出为:10 + 20 = 30
$string = "$a + $b = ".$sum; // 输出为:10 + 20 = 30
单引号的字符串几乎是字面上的,而双引号的字符串用它们的值替换变量,以及特别解释某些字符序列。
<?php
$var = "name";
$literally = 'My $var will not print!';
print($literally);
print "<br/>";
$literally = "My $var will print!";
print($literally);
?>
执行上面示例代码,得到以下结果 -
My $var will not print!
My name will print!
对字符串长度几乎没有限制 - 在可用内存的范围内任意长度。
由双引号分隔的字符串(如:"this"
)在PHP中通过以下两种方式进行预处理 -
- 某些以反斜杠(``)开头的字符序列被替换为特殊字符;
- 变量名称(以
$
开头)被替换为其值的字符串表示形式;
转义字符序列替换是 -
n
被替换为换行符;r
被替换为回车符t
被替换为制表符$
被替换为美元符号($
)"
被替换为回车符"
被替换为单个双引号("
)'
被替换为单个单引号('
)
6. Here-Doc界定符
可以使用here-doc
将多行分配给一个字符串变量 -
<?php
$channel =<<<MY_XML
<channel>
<title>今天学习什么?</title>
<link>http://www.yiibai.com/ </link>
<description>选择你喜欢的内容学习吧!</description>
</channel>
MY_XML;
echo <<<END
This uses the "here document" syntax to output multiple lines with variable <br/>
interpolation. <br/>
Note that the here document terminator must appear on a line with <br/>
just a semicolon. no extra whitespace!
<hr/>
END;
print $channel;
?>
执行上面示例代码,将产生以下结果 -
7. 变量范围
可以为一个定义变量声明它在程序中可用范围。 PHP变量范围类型有以下四种 -
8. 变量命名
命名变量的规则是 -
- 变量名称必须以字母或下划线字符开头。
- 变量名可以由数字,字母,下划线组成,但不能使用
+
,-
,%
,(
,)
,.
,&
等字符。
变量名称的长度不限制。