跳转到内容

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 很棒且很棒。”)附加到文字字符串“所有酷孩子都在做。”,并将此新字符串分配给 $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*$x10

在将 $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.

注意:在 echo 语句中,字符串中出现 \n 的地方,输出中就会出现换行。但是,当在 Web 浏览器中显示 HTML 文档时,\n 不会产生换行符。这是因为 PHP 引擎不会渲染脚本。相反,PHP 引擎输出 HTML 代码,随后由 Web 浏览器渲染。PHP 脚本中的换行符 \n 将变为 HTML 空格,Web 浏览器在渲染时会跳过空格(就像 PHP 引擎在生成 HTML 时会跳过 PHP 脚本中的空格一样)。这并不意味着 \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 源代码)包含换行符。


其他特殊字符包括 ASCII NUL\0)——用于填充二进制文件,**制表符**(\t)——用于显示标准制表符,以及 return\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 的内容。

更多信息

[编辑 | 编辑源代码]


华夏公益教科书