示例


示例 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,&lt;br /&gt;awesome&lt;br /&gt;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 的内容。

 

进一步了解

 


最后修改: 2025年01月9日 星期四 19:46