跳转到内容

PHP 编程/基础知识

来自 Wikibooks,开放世界中的开放书籍
(从 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);


除此之外,可以使用字母“e”引入 10 的幂

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 行模板代码进行这样的操作。是的,很重要。顺便说一句,如果您在不更改输出的情况下更改实现,这被称为重构。熟悉这个术语。您会经常使用它。请参阅下面有关复合赋值的更多示例。

示例 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 中是完全合法的,但对于像这样常见的运算来说,它有点冗长。它可以很容易地被自增运算符替换,从而缩短语句。

此代码片段使用自增和自减运算符来增加和减少变量的值 1。

代码:

$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 运算符的更深入概述,包括对位运算符的解释,请参阅下面的手册链接。

优先级

[编辑 | 编辑源代码]

优先级决定了在语句中较早执行的某些运算符的优先级。如果一个运算符具有更高的优先级,并不意味着它更重要;相反的情况通常是正确的。

结合性

当多个运算符具有相同的优先级(无论是相同运算符的多个实例,还是只是具有相同优先级的不同运算符)时,考虑结合性就变得很重要:是右结合性(从左到右)、左结合性(从右到左),还是非结合性。

结合性无关紧要的示例

在某些情况下(如以下示例),特别是在存在相同运算符的情况下,结合性可能对结果没有影响。

以下...

$a = 5*2*3*4; // Equals 120

...与其左结合性等价于

$a = (((5*2)*3)*4); // Equals 120

但是,在这种情况下,右结合性会产生相同的结果

$a = (5*(2*(3*4))); // Would also equal 120
结合性在 PHP 中相关(但在数学上不相关)的示例

在数学中,可能认为对具有相同优先级的运算符以哪个方向进行计算无关紧要。

例如,以下...

$a = 5 + 3 - 2 + 8; // Equals 14

...等价于此(左结合性)语句

$a = (((5 + 3) - 2) + 8); // Equals 14

并且,如果根据人类在数学计算中的约定来考虑这一点,以下等价的右结合性表达式会产生相同的结果

$a = (5 + (3 + (-2 + 8))); // Would also equal 14

但是,由于我们正在处理一种线性计算机语言,它不知道将“2”转换为负数并将其与“8”组合,然后再将其添加到“3”(然后是“5”),如果 PHP 以严格的右结合性方式执行以下表达式,则会发生以下(错误)结果

$a = (5 + (3 - (2 + 8))); // Would equal -2

因此,结合性是相关的,应该记住(尽管通常最好使自己的分组显式——既是为了避免错误,也是为了提高查看代码的其他人可读性)。

类似的问题发生在乘法和除法中。虽然按照人类的约定,所有相邻的乘法和除法组都会在分子级别执行乘法,在分母级别执行除法,但 PHP 解释器不知道这样做,因此它必须在没有显式分组(通过括号——它们具有最高优先级)的情况下设置左(从左到右)约定

$a = 5*4/2*3; // Equals 30

这等价于左结合性

$a = (((5*4)/2)*3); // Also equals 30

但是,与上面的加法/减法示例一样,以右结合性(以严格的逆线性方式)执行此操作不会产生相同(预期)的结果

$a = (5*(4/(2*3))); // Equals 3.33333

换行符和其他特殊字符

[编辑 | 编辑源代码]

以下两个示例都使用换行符\n\r\n\r,根据操作系统而定)来表示当前行的结尾和新行的开始。

换行符的使用方式如下

代码:

echo "PHP is cool,\nawesome,\nand great.";

输出:

PHP is cool,
awesome,
and great.

注意:换行符出现在输出中的位置与\n 在 echo 语句中的字符串中的位置相同。但是,当 HTML 文档在 Web 浏览器中显示时,\n 不会产生换行符。这是因为 PHP 引擎不渲染脚本。相反,PHP 引擎输出 HTML 代码,该代码随后由 Web 浏览器渲染。PHP 脚本中的换行符\n 变为 HTML 空白,Web 浏览器在渲染时会跳过它(就像 PHP 脚本中的空白在 PHP 引擎生成 HTML 时会被跳过一样)。这并不意味着\n 运算符没有用;它可以用来向 HTML 添加空白,因此如果有人查看 PHP 脚本生成的 HTML,他们会更容易阅读。

为了插入由 Web 浏览器渲染的换行符,必须使用 <br /> 标签来换行。

注意:换行符对于 Linux/Unix 系统是 \n,对于 Windows 是 \r\n,对于 Mac 是 \r(直到 1996 年,基于 Linux 的 MkLinux 问世)。

因此,上面的语句将被修改为
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) - 用于填充二进制文件,制表符\t) - 用于显示标准制表符,以及回车符\r) - 表示回车符。同样,这些字符不会改变 HTML 的渲染,因为它们会向 HTML 源代码添加空白。为了在最终的网页中渲染制表符和回车符,应该使用 &tab; 来表示制表符,使用 <br /> 来表示回车符。

PHP 的输入

[编辑 | 编辑源代码]

PHP 有一组用于检索输入的函数。如果你使用标准输入(例如来自命令行的输入),可以使用基本输入函数检索它

从标准输入读取
$mystring = fgets($stdin);

$stdin = fopen('php://stdin', 'r'); // opens standard input
$line = fgets($stdin); // reads until user presses ENTER


Web 服务器

[编辑 | 编辑源代码]

在 Web 服务器上,发送到 PHP 应用程序的信息可能是 GET 操作或 POST 操作。

对于 GET 操作,参数通过地址栏发送。地址栏中的参数可以使用访问$_GET['parameter'] 来检索。在 POST 操作中,提交的输入通过$_POST['parameter'] 访问。

一个更通用的数组,$_REQUEST['parameter'] 包含$_GET$_POST$_COOKIE 的内容。

更多信息

[编辑 | 编辑源代码]


华夏公益教科书