PHP 编程/基础知识
此示例使用数学表达式中使用的五个基本运算符。这些是 PHP 中执行的所有数学和字符串运算的基础。
+ |
- |
* |
/ |
=
|
加 | 减 | 乘 | 除 | 赋值 |
五个数学运算符的功能与在 C++ 和 Java 中找到的运算符完全相同
<?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 />";
?>
35<br />2.5<br />1250<br />
35 2.5 1250
echo "<br />";
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
此示例演示了连接运算符 (.
),它将两个字符串连接在一起,生成一个包含两个部分的字符串。它类似于在 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 行模板代码进行这样的操作。是的,很重要。顺便说一句,如果您在不更改输出的情况下更改实现,这被称为重构。熟悉这个术语。您会经常使用它。请参阅下面有关复合赋值的更多示例。
此代码段演示了自引用快捷运算符。第一个这样的运算符是++
运算符,它将$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 运算符的更深入概述,包括对位运算符的解释,请参阅下面的手册链接。
优先级决定了在语句中较早执行的某些运算符的优先级。如果一个运算符具有更高的优先级,并不意味着它更重要;相反的情况通常是正确的。
- 结合性
当多个运算符具有相同的优先级(无论是相同运算符的多个实例,还是只是具有相同优先级的不同运算符)时,考虑结合性就变得很重要:是右结合性(从左到右)、左结合性(从右到左),还是非结合性。
- 结合性无关紧要的示例
在某些情况下(如以下示例),特别是在存在相同运算符的情况下,结合性可能对结果没有影响。
以下...
$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
,根据操作系统而定)来表示当前行的结尾和新行的开始。
注意:换行符出现在输出中的位置与\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,<br />awesome<br />and great.';
函数nl2br()
可用于自动将字符串中的换行符转换为<br />
标签。
$string = "This\ntext\nbreaks\nlines.";
$string = nl2br($string);
print $string;
This<br /> text<br /> breaks<br /> lines.
This text breaks lines.
其他特殊字符包括 ASCIINUL
(\0
) - 用于填充二进制文件,制表符(\t
) - 用于显示标准制表符,以及回车符
(\r
) - 表示回车符。同样,这些字符不会改变 HTML 的渲染,因为它们会向 HTML 源代码添加空白。为了在最终的网页中渲染制表符和回车符,应该使用 &tab; 来表示制表符,使用 <br /> 来表示回车符。
PHP 有一组用于检索输入的函数。如果你使用标准输入(例如来自命令行的输入),可以使用基本输入函数检索它
$mystring = fgets($stdin);
或
$stdin = fopen('php://stdin', 'r'); // opens standard input $line = fgets($stdin); // reads until user presses ENTER
在 Web 服务器上,发送到 PHP 应用程序的信息可能是 GET 操作或 POST 操作。
对于 GET 操作,参数通过地址栏发送。地址栏中的参数可以使用访问$_GET['parameter']
来检索。在 POST 操作中,提交的输入通过$_POST['parameter']
访问。
一个更通用的数组,$_REQUEST['parameter']
包含$_GET
、$_POST
和 $_COOKIE
的内容。