PHP编程
示例
示例 1 - 基本的算术运算符
此示例使用了数学表达式中常用的五个基本运算符。这些运算符是 PHP 中所有数学和字符串操作的基础。
运算符 | 操作 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
= | 赋值 |
这五个数学运算符的功能与 C++ 和 Java 中的相同。
请看这个示例。赋值运算符右侧的每个数学表达式会按常规的运算顺序进行求值。表达式计算完成后,结果值会被赋给赋值运算符左侧的变量。
PHP 代码:
<?php
$x = 25;
$y = 10;
$z = $x + $y;
echo $z;
echo "<br />";
$z = $x/$y;
echo $z;
echo "<br />";
$z = $y*$y*$x;
echo $z - 1250;
echo "<br />";
?>
PHP 输出:
35<br />2.5<br />1250<br />
HTML 渲染:
35
2.5
1250
注意:
如果你不熟悉 (X)HTML,可能不了解以下代码部分的目的:
echo "<br />";
它的作用是在结果之间插入一个 HTML “换行符”,使浏览器在渲染页面时,将每个结果显示在新的一行上。如果没有这一行,代码将打印出:
352.51250
这显然不是期望的结果。
赋值运算符的反操作
除了赋值运算符(=
)之外,还有两个代码选项用于执行其相反的操作。关键字 null
用于变量的“清空”,它实际上是作为赋值运算符(=
)的替代值使用。如果你想销毁一个变量,可以使用 unset()
语言构造。
示例:
$variable = null;
或
unset($variable);
10 的幂
10 的幂可以通过字母 "e" 来表示:
print 2e1; // 20
print 4e-3; // 0.004
数字格式化
数字格式化通过 number_format()
函数来实现,可以设置小数位数、十进制分隔符和千位分隔符。
示例:
print number_format(3333.333333, 2, ',', ' '); // 3 333,33
示例 2 - 字符串连接
这个示例演示了连接运算符(.
),它将两个字符串连接在一起,生成一个包含这两个部分的字符串。它类似于 C++ 字符串类(参见 STL)、Java、JavaScript、Python 实现中常见的加号(+
)运算符。
语句
$string = $string . " " . "All the cool kids are doing it.";
将当前 $string
的值(即 "PHP is wonderful and great."
)与字面量字符串 " All the cool kids are doing it."
连接,并将这个新字符串赋给 $string
。
代码:
<?php
$string = "PHP is wonderful and great.";
$string = $string . " " . "All the cool kids are doing it.";
echo $string;
?>
输出:
PHP is wonderful and great. All the cool kids are doing it.
正如我们所知,或者对于编程新手来说,很快就会发现,程序员总是在寻找“更简洁的代码”。简单来说,我们以在最少的按键操作下完成最多的工作为荣。考虑到这一点,这里有一个小技巧,可以节省那些宝贵的按键操作:同时进行连接和赋值。这非常简单。我们使用与上面相同的例子。
代码:
<?php
$string = "PHP is wonderful and great.";
$string .= " " . "All the cool kids are doing it.";
echo $string;
?>
输出:
PHP is wonderful and great. All the cool kids are doing it.
你通过这种方法节省了 8 个按键操作,而且输出结果完全相同。大不了吗?想象一下,最近我处理 100 行模板代码时,必须执行类似的操作。是的,这很重要。顺便说一下,如果你不改变输出的结果,而是更改实现方式,这叫做重构(refactoring)。让这个术语成为你的朋友吧,你将经常使用它。下面会看到更多关于复合赋值的示例。
示例 3 - 快捷操作符
这个代码片段演示了自引用的快捷操作符。第一个快捷操作符是 ++
运算符,它使用后缀形式将 $x
增加 1,使其值变为 2。增加 $x
之后,定义并赋值 $y
为 5。
第二个快捷操作符是 *=
,它将 $y
赋值为 $y * $x
,即 10。
在初始化 $z
为 180 后,接下来的代码执行了两个快捷操作。根据运算顺序(参见手册页面),$y
被递减(使用前缀形式),然后用结果除以 $z
。$z
被赋值为结果值 20。
代码:
<?php
$x = 1;
$x++;
echo $x . " ";
$y = 5;
$y *= $x;
echo $y . " ";
$z = 180;
$z /= --$y;
echo $z;
?>
输出:
2 10 20
注意:
上面代码的展开版本(不使用快捷操作符)如下所示:
<?php
$x = 1;
$x = $x + 1;
echo $x . " ";
$y = 5;
$y = $y * $x;
echo $y . " ";
$z = 180;
$y = $y - 1;
$z = $z / $y;
echo $z;
?>
输出结果与上面的示例相同。
示例 3 - 快捷操作符
这个代码片段演示了自引用的快捷操作符。第一个快捷操作符是 ++
运算符,它使用后缀形式将 $x
增加 1,使其值变为 2。增加 $x
之后,定义并赋值 $y
为 5。
第二个快捷操作符是 *=
,它将 $y
赋值为 $y * $x
,即 10。
在初始化 $z
为 180 后,接下来的代码执行了两个快捷操作。根据运算顺序(参见手册页面),$y
被递减(使用前缀形式),然后用结果除以 $z
。$z
被赋值为结果值 20。
代码:
<?php
$x = 1;
$x++;
echo $x . " ";
$y = 5;
$y *= $x;
echo $y . " ";
$z = 180;
$z /= --$y;
echo $z;
?>
输出:
2 10 20
注意:
上面代码的展开版本(不使用快捷操作符)如下所示:
<?php
$x = 1;
$x = $x + 1;
echo $x . " ";
$y = 5;
$y = $y * $x;
echo $y . " ";
$z = 180;
$y = $y - 1;
$z = $z / $y;
echo $z;
?>
输出结果与上面的示例相同。
新概念
操作符
操作符是用于表达式中的任何符号,用于操作数据。PHP 中的七个基本操作符如下:
=
(赋值)+
(加法)-
(减法)*
(乘法)/
(除法)%
(取模).
(连接)
此外,上述每个操作符都可以与赋值操作结合,形成以下操作符:
+=
(加法赋值)-=
(减法赋值)*=
(乘法赋值)/=
(除法赋值)%=
(取模赋值).=
(连接赋值)
这些操作符用于在变量与第二个值相加、相减、相乘或相除后,再将结果赋值给变量本身。
换句话说,语句
$var = $var + 5;
和
$var += 5;
是等价的。
PHP 还提供了递增和递减操作符:
++
(递增)--
(递减)
这两个操作符是加法和减法赋值操作符的特殊形式。
代码:
$var = 0;
$var += 1;
echo "The incremented value is $var.\n";
$var -= 1;
echo "The decremented value is $var.\n";
输出:
The incremented value is 1.
The decremented value is 0.
虽然这种写法在 PHP 中是合法的,但对于像这种常见的操作来说,它显得有些冗长。可以很容易地通过递增操作符来简化语句。
代码:
$var = 3;
$var++;
echo "The incremented value is $var.\n";
$var--;
echo "The decremented value is $var.\n";
输出:
The incremented value is 4.
The decremented value is 3.
使用递增操作符使得代码稍微更容易阅读和理解。
若要了解更多关于 PHP 操作符的内容,包括位运算符的解释,请参考下面的手册链接。
优先级
优先级决定了某些操作符在语句中执行的先后顺序。如果某个操作符的优先级较高,并不意味着它更重要,通常情况下,优先级较低的操作符执行顺序才更符合我们的直觉。
结合性
当多个操作符的优先级相同(无论是同一操作符的多个实例,还是不同优先级相同的操作符)时,结合性就变得重要:是从右到左(right to left)、从左到右(left to right)还是无结合性(non-associative)。
结合性无关的例子
在某些情况下(如下面的例子),特别是当同一操作符出现时,结合性对结果没有影响。
下面的代码:
$a = 5 * 2 * 3 * 4; // 等于 120
由于左结合性,它等价于:
$a = (((5 * 2) * 3) * 4); // 等于 120
然而,右结合性会产生相同的结果:
$a = (5 * (2 * (3 * 4))); // 也等于 120
在 PHP 中结合性有影响的例子(但在数学中无关)
在数学中,对于优先级相同的操作符,计算顺序的方向通常是无关的。
例如,下面的代码:
$a = 5 + 3 - 2 + 8; // 等于 14
等价于(左结合性):
$a = (((5 + 3) - 2) + 8); // 等于 14
如果按照数学常规计算,下面的右结合性表达式也应该得到相同结果:
$a = (5 + (3 + (-2 + 8))); // 也等于 14
然而,由于我们在使用线性计算机语言,PHP 不会自动把“2”转为负数并与“8”一起组合后再加到“3”(然后加到“5”),如果 PHP 以严格的右结合性执行以下表达式,错误的结果将会是:
$a = (5 + (3 - (2 + 8))); // 将等于 -2
因此,结合性是有影响的,应该记住(尽管通常好习惯是显式地分组代码,以避免错误并提高代码的可读性)。
类似的问题也会出现在乘法和除法运算中。虽然按照人类常规,所有相邻的乘法和除法组应该先进行分子层的乘法运算,再进行分母层的除法运算,但 PHP 解释器并不会这样处理,因此如果没有明确的分组(通过括号——括号具有最高优先级),它将遵循左结合性规则:
$a = 5 * 4 / 2 * 3; // 等于 30
这等价于左结合性:
$a = (((5 * 4) / 2) * 3); // 也等于 30
然而,如同上面的加法/减法例子一样,如果严格按照右结合性执行(线性逆序),则不会得到相同的(预期)结果:
$a = (5 * (4 / (2 * 3))); // 等于 3.33333
新行符和其他特殊字符
以下两个例子都使用了换行符(\n
、\r\n
或 \r
,具体取决于操作系统)来表示当前行的结束和新行的开始。
换行符的使用方式如下:
代码:
echo "PHP is cool,\nawesome,\nand great.";
输出:
PHP is cool,
awesome,
and great.
注意:换行符在 echo
语句中的字符串中出现时,输出会发生换行。然而,当 HTML 文档在网页浏览器中显示时,\n
并不会产生换行。这是因为 PHP 引擎不会直接渲染脚本,而是输出 HTML 代码,由网页浏览器渲染。因此,PHP 脚本中的换行符 \n
会变成 HTML 空格,在浏览器渲染时会被跳过(就像 PHP 脚本中的空格在 PHP 引擎生成 HTML 时被跳过一样)。这并不意味着 \n
操作符没有用,它可以用来在 HTML 中添加空格,因此如果有人查看你 PHP 脚本生成的 HTML,他们会更容易阅读。
要插入一个浏览器能够渲染的换行符,你必须使用 <br />
标签来换行。
注意:换行符在不同操作系统中的表现不同:
- 在 Linux/Unix 系统中是
\n
- 在 Windows 系统中是
\r\n
- 在 Mac 系统(1996 年前)中是
\r
因此,上面的语句应该这样修改:
echo 'PHP is cool,<br />awesome<br />and great.';
nl2br()
函数可以自动将字符串中的换行符转换为 <br />
标签。
该字符串必须通过该函数传递,然后重新赋值:
PHP 代码:
$string = "This\ntext\nbreaks\nlines.";
$string = nl2br($string);
print $string;
PHP 输出:
This<br />
text<br />
breaks<br />
lines.
HTML 渲染:
This
text
breaks
lines.
此外,上述示例生成的 PHP 输出(HTML 源代码)中包括了换行符。
其他特殊字符包括:
ASCIINUL
(\0
) - 用于填充二进制文件tab
(\t
) - 用于显示标准的制表符return
(\r
) - 表示回车符
这些字符不会改变 HTML 的渲染,因为它们只是添加空白到 HTML 源代码中。要在最终的网页中渲染制表符和回车符,应该使用 &tab;
来表示制表符,使用 <br />
来表示回车符。
PHP 输入
PHP 提供了一组函数来获取输入。如果你使用标准输入(例如命令行输入),可以使用基本的输入函数:
从标准输入读取:
$mystring = fgets($stdin);
或者:
$stdin = fopen('php://stdin', 'r'); // 打开标准输入
$line = fgets($stdin); // 读取直到用户按下 ENTER 键
Web 服务器
在 Web 服务器上,发送到 PHP 应用程序的信息可以是 GET 操作或 POST 操作。
对于 GET 操作,参数通过地址栏发送。可以通过访问 $_GET['parameter']
来获取这些参数。在 POST 操作中,提交的输入通过 $_POST['parameter']
获取。
一个更通用的数组 $_REQUEST['parameter']
包含了 $_GET
、$_POST
和 $_COOKIE
的内容。
进一步了解