PHP语法

PHP 脚本可以放在文档中的任何位置,以<?php 开始,以?> 结束,通常包含 HTML 标签和一些 PHP 脚本代码,每个代码行都必须以分号结束。

PHP有两种在浏览器输出文本的基础指令:echoprint

实例1:向页面输出Hello World!

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <h1>My first PHP page</h1>
  5. <?php
  6. echo "Hello World!";
  7. ?>
  8. </body>
  9. </html>

实例2:PHP中的注释和C语言一样

  1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <?php
  5. // 这是 PHP 单行注释
  6. /*
  7. 这是
  8. PHP 多行
  9. 注释
  10. */
  11. ?>
  12. </body>
  13. </html>

PHP变量

变量是用于存储信息的”容器”:从下面的表达式 z=x+y ,我们可以计算出 z 的值为 11,在 PHP 中,这些字母被称为变量,没有声明变量的命令,变量在第一次赋值给它的时候被创建

PHP 变量规则:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

实例3:PHP中的变量

  1. <?php
  2. $x=5;
  3. $y=6;
  4. $z=$x+$y;
  5. echo $z;
  6. ?>

PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型。

实例4:PHP是弱类型语言

  1. <?php
  2. $txt="Hello world!";
  3. $x=5;
  4. $y=10.5;
  5. ?>

PHP 变量作用域

变量的作用域是脚本中变量可被引用或是使用的部分,PHP 有四种不同的变量作用域:local、global、static、parameter

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字,在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:

实例5:全局变量和局部变量

  1. <?php
  2. $x=5; // 全局变量
  3. function myTest()
  4. {
  5. $y=10; // 局部变量
  6. echo "<p>测试函数内变量:<p>";
  7. echo "变量 x 为: $x";
  8. echo "<br>";
  9. echo "变量 y 为: $y";
  10. }
  11. myTest();
  12. echo "<p>测试函数外变量:<p>";
  13. echo "变量 x 为: $x";
  14. echo "<br>";
  15. echo "变量 y 为: $y";
  16. ?>
  17. 输出:
  18. 变量 x 为:
  19. 变量 y 为: 10
  20. 测试函数外变量:
  21. 变量 x 为: 5
  22. 变量 y 为:

在以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。

当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数内定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。

然后我们在myTest()函数外输出两个变量的值,函数将会输出全局变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。

所以可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。

实例6:函数内访问全局变量用global 关键字

  1. <?php
  2. $x=5;
  3. $y=10;
  4. function myTest()
  5. {
  6. global $x,$y;
  7. $y=$x+$y;
  8. }
  9. myTest();
  10. echo $y; // 输出 15
  11. ?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index]的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

实例6:上面的实例5可以写成这样

  1. <?php
  2. $x=5;
  3. $y=10;
  4. function myTest()
  5. {
  6. $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
  7. }
  8. myTest();
  9. echo $y;
  10. ?>

当一个函数完成时,它的所有变量通常都会被删除,有时候希望某个局部变量不被删除。要做到这一点,第一次声明变量时使用 static 关键字,然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。(该变量仍然是函数的局部变量)

实例7:static作用域

  1. <?php
  2. function myTest()
  3. {
  4. static $x=0;
  5. echo $x;
  6. $x++;
  7. echo PHP_EOL; // 换行符
  8. }
  9. myTest();
  10. myTest();
  11. myTest();
  12. ?>

参数是通过调用代码将值传递给函数的局部变量,在参数列表中声明的,作为函数声明的一部分

实例8:参数作用域

  1. <?php
  2. function myTest($x)
  3. {
  4. echo $x;
  5. }
  6. myTest(5);
  7. ?>

在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中没有全局变量相同的变量,也会被覆盖。

实例9:

  1. <?php
  2. $a=5;
  3. $b=3;
  4. function t()
  5. {
  6. echo $a-$b; // 输出 0
  7. }
  8. t();
  9. ?>

要想在函数中直接使用全局变量可以通过 global 关键字声明或者通过 php 中自定义的 $GLOBALS 数组获取

实例10:

  1. <?php
  2. $a=5;
  3. $b=3;
  4. function t1()
  5. {
  6. global $a,$b;
  7. echo $a-$b; // 输出 2
  8. }
  9. t1();
  10. echo PHP_EOL;
  11. function t2()
  12. {
  13. echo $GLOBALS['a']-$GLOBALS['b']; // 输出 2
  14. }
  15. t2();
  16. ?>

PHP 5 echo/print语句

echo 和 print 区别:

  • echo - 可以输出一个或多个字符串,没有返回值
  • print - 只允许输出一个字符串,返回值总为 1

实例11:使用 echo 命令输出字符串(字符串可以包含 HTML 标签)

  1. <?php
  2. echo "<h2>PHP 很有趣!</h2>";
  3. echo "Hello world!<br>";
  4. echo "我要学 PHP!<br>";
  5. echo "这是一个", "字符串,", "使用了", "多个", "参数。";
  6. ?>

实例12:使用 echo 命令输出变量和字符串

  1. <?php
  2. $txt1="学习 PHP";
  3. $txt2="RUNOOB.COM";
  4. $cars=array("Volvo","BMW","Toyota");
  5. echo $txt1;
  6. echo "<br>";
  7. echo "在 $txt2 学习 PHP ";
  8. echo "<br>";
  9. echo "我车的品牌是 {$cars[0]}";
  10. ?>

实例13:使用 print 命令输出字符串(字符串可以包含 HTML 标签)

  1. <?php
  2. print "<h2>PHP 很有趣!</h2>";
  3. print "Hello world!<br>";
  4. print "我要学习 PHP!";
  5. ?>

实例14:使用 print 命令输出变量和字符串

  1. <?php
  2. $txt1="学习 PHP";
  3. $txt2="RUNOOB.COM";
  4. $cars=array("Volvo","BMW","Toyota");
  5. print $txt1;
  6. print "<br>";
  7. print "在 $txt2 学习 PHP ";
  8. print "<br>";
  9. print "我车的品牌是 {$cars[0]}";
  10. ?>

PHP EOF(heredoc)

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。

使用概述:

  • 必须后接分号,否则编译通不过。
  • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。**
  • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。

实例15:

  1. <?php
  2. echo <<<EOF
  3. <h1>我的第一个标题</h1>
  4. <p>我的第一个段落。</p>
  5. EOF;
  6. // 结束需要独立一行且前后不能空格
  7. ?>
  • <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
  • 开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。
  • 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 ., 来拼接,如下

实例16:

  1. <?php
  2. $name="runoob";
  3. $a= <<<EOF
  4. "abc"$name
  5. "123"
  6. EOF;
  7. // 结束需要独立一行且前后不能空格
  8. echo $a;
  9. ?>

PHP 5 数据类型

字符串:可以将任何文本放在单引号和双引号中

实例17:字符串

  1. <?php
  2. $x = "Hello world!";
  3. echo $x;
  4. echo "<br>";
  5. $x = 'Hello world!';
  6. echo $x;
  7. ?>

整型:没有小数,可以是正数或负数,可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。

PHPvar_dump()函数返回变量的数据类型和值,判断一个变量的类型与长度,并输出变量的数值。如果变量有值,则输出是变量的值,并返回数据类型。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

格式:

  1. var_dump ( mixed expression [, mixed expression [, ...]] )

注意:用保证 var_dump 中的变量必须是存在的,如果变量不存在则返回 NULL。该函数有输出的功能,因此不必加其它的输出函数。

实例18:整型

  1. <?php
  2. $x = 5985;
  3. var_dump($x);
  4. echo "<br>";
  5. $x = -345; // 负数
  6. var_dump($x);
  7. echo "<br>";
  8. $x = 0x8C; // 十六进制数
  9. var_dump($x);
  10. echo "<br>";
  11. $x = 047; // 八进制数
  12. var_dump($x);
  13. ?>

浮点型:是带小数部分的数字,或是指数形式。

实例19:浮点型

  1. <?php
  2. $x = 10.365;
  3. var_dump($x);
  4. echo "<br>";
  5. $x = 2.4e3;
  6. var_dump($x);
  7. echo "<br>";
  8. $x = 8E-5;
  9. var_dump($x);
  10. ?>

布尔型

实例20:布尔型

  1. $x=true;
  2. $y=false;

数组:可以在一个变量中存储多个值

实例21:数组

  1. <?php
  2. $cars=array("Volvo","BMW","Toyota");
  3. var_dump($cars);
  4. ?>

对象:对象数据类型也可以用于存储数据。在 PHP 中,对象必须声明。

首先,必须使用class关键字声明类对象,类是可以包含属性和方法的结构。然后我们在类中定义数据类型,然后在实例化的类中使用数据类型,实例21中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。

实例21:对象

  1. <?php
  2. class Car
  3. {
  4. var $color;
  5. function __construct($color="green") {
  6. $this->color = $color;
  7. }
  8. function what_color() {
  9. return $this->color;
  10. }
  11. }
  12. ?>

NULL:NULL 值表示变量没有值, 是数据类型为 NULL 的值。NULL 值指明一个变量是否为空值。,同样可用于数据空值和NULL值的区别,可以通过设置变量值为 NULL 来清空变量数据

实例22:NULL

  1. <?php
  2. $x="Hello world!";
  3. $x=null;
  4. var_dump($x);
  5. ?>

PHP类型比较

虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

例如,”42” 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 “FALSE” 是一个字符串。

实例23:类型比较

  1. <?php
  2. if(42 == "42") {
  3. echo '1、值相等';
  4. }
  5. echo PHP_EOL; // 换行符
  6. if(42 === "42") {
  7. echo '2、类型相等';
  8. } else {
  9. echo '3、类型不相等';
  10. }
  11. ?>
  12. 输出:
  13. 1、值相等
  14. 3、类型不相等

实例24:PHP中 比较 0、false、null

  1. <?php
  2. echo '0 == false: ';
  3. var_dump(0 == false);
  4. echo '0 === false: ';
  5. var_dump(0 === false);
  6. echo PHP_EOL;
  7. echo '0 == null: ';
  8. var_dump(0 == null);
  9. echo '0 === null: ';
  10. var_dump(0 === null);
  11. echo PHP_EOL;
  12. echo 'false == null: ';
  13. var_dump(false == null);
  14. echo 'false === null: ';
  15. var_dump(false === null);
  16. echo PHP_EOL;
  17. echo '"0" == false: ';
  18. var_dump("0" == false);
  19. echo '"0" === false: ';
  20. var_dump("0" === false);
  21. echo PHP_EOL;
  22. echo '"0" == null: ';
  23. var_dump("0" == null);
  24. echo '"0" === null: ';
  25. var_dump("0" === null);
  26. echo PHP_EOL;
  27. echo '"" == false: ';
  28. var_dump("" == false);
  29. echo '"" === false: ';
  30. var_dump("" === false);
  31. echo PHP_EOL;
  32. echo '"" == null: ';
  33. var_dump("" == null);
  34. echo '"" === null: ';
  35. var_dump("" === null);
  36. 输出:
  37. 0 == false: bool(true)
  38. 0 === false: bool(false)
  39. 0 == null: bool(true)
  40. 0 === null: bool(false)
  41. false == null: bool(true)
  42. false === null: bool(false)
  43. "0" == false: bool(true)
  44. "0" === false: bool(false)
  45. "0" == null: bool(false)
  46. "0" === null: bool(false)
  47. "" == false: bool(true)
  48. "" === false: bool(false)
  49. "" == null: bool(true)
  50. "" === null: bool(false)

PHP常量

常量是一个简单值的标识符。该值在脚本中不能改变。

一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符),常量在整个脚本中都可以使用。

使用常量时,不能在常量名前添加$ 符号,不然会将常量转换成新的未定义变量使用,会导致报错。

设置常量,使用 define() 函数,函数语法如下:

  1. bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

该函数有三个参数:

  • name:必选参数,常量名称,即标志符。
  • value:必选参数,常量的值。
  • case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。

实例25:区分大小写的常量

  1. <?php
  2. // 区分大小写的常量名
  3. define("GREETING", "欢迎访问 Runoob.com");
  4. echo GREETING; // 输出 "欢迎访问 Runoob.com"
  5. echo '<br>';
  6. echo greeting; // 输出 "greeting"
  7. ?>

实例26:不区分大小写的常量

  1. <?php
  2. // 不区分大小写的常量名
  3. define("GREETING", "欢迎访问 Runoob.com", true);
  4. echo greeting; // 输出 "欢迎访问 Runoob.com"
  5. ?>

PHP字符串变量

字符串变量用于包含有字符的值。在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。

实例27:

  1. <?php
  2. $txt="Hello world!";
  3. echo $txt;
  4. ?>

在 PHP 中,只有一个字符串运算符,并置运算符 (.) 用于把两个字符串值连接起来。

实例28:并置运算符

  1. <?php
  2. $txt1="Hello world!";
  3. $txt2="What a nice day!";
  4. echo $txt1 . " " . $txt2;
  5. ?>
  6. 输出:
  7. Hello world! What a nice day!

strlen() 函数返回字符串的长度(字节数)

实例29:strlen() 函数

  1. <?php
  2. echo strlen("Hello world!");
  3. ?>
  4. 输出:
  5. 12

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

实例30:strpos() 函数

  1. <?php
  2. echo strpos("Hello world!","world");
  3. ?>
  4. 输出:
  5. 6

PHP运算符

算术运算符:

运算符 名称 描述 实例 结果
x + y x 和 y 的和 2 + 2 4
x - y x 和 y 的差 5 - 2 3
x * y x 和 y 的积 5 * 2 10
x / y x 和 y 的商 15 / 5 3
x % y 模(除法的余数) x 除以 y 的余数 5 % 2 10 % 8 10 % 2 1 2 0
- x 取反 x 取反 <?php $x =2; echo -$x; ?> -2
a . b 并置 连接两个字符串 “Hi” . “Ha” HiHa

实例31:

  1. <?php
  2. $x=10;
  3. $y=6;
  4. echo ($x + $y); // 输出16
  5. echo '<br>'; // 换行
  6. echo ($x - $y); // 输出4
  7. echo '<br>'; // 换行
  8. echo ($x * $y); // 输出60
  9. echo '<br>'; // 换行
  10. echo ($x / $y); // 输出1.6666666666667
  11. echo '<br>'; // 换行
  12. echo ($x % $y); // 输出4
  13. echo '<br>'; // 换行
  14. echo -$x;
  15. ?>

赋值运算符:

运算符 等同于 描述
x = y x = y 左操作数被设置为右侧表达式的值
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y 模(除法的余数)
a .= b a = a . b 连接两个字符串

实例32:

  1. <?php
  2. $x=10;
  3. echo $x; // 输出10
  4. $y=20;
  5. $y += 100;
  6. echo $y; // 输出120
  7. $z=50;
  8. $z -= 25;
  9. echo $z; // 输出25
  10. $i=5;
  11. $i *= 6;
  12. echo $i; // 输出30
  13. $j=10;
  14. $j /= 5;
  15. echo $j; // 输出2
  16. $k=15;
  17. $k %= 4;
  18. echo $k; // 输出3
  19. ?>

实例33:字符串运算

  1. <?php
  2. $a = "Hello";
  3. $b = $a . " world!";
  4. echo $b; // 输出Hello world!
  5. $x="Hello";
  6. $x .= " world!";
  7. echo $x; // 输出Hello world!
  8. ?>

递增/递减运算符:

运算符 名称 描述
++ x 预递增 x 加 1,然后返回 x
x ++ 后递增 返回 x,然后 x 加 1
— x 预递减 x 减 1,然后返回 x
x — 后递减 返回 x,然后 x 减 1

实例34:

  1. <?php
  2. $x=10;
  3. echo ++$x; // 输出11
  4. $y=10;
  5. echo $y++; // 输出10
  6. $z=5;
  7. echo --$z; // 输出4
  8. $i=5;
  9. echo $i--; // 输出5
  10. ?>

比较运算符:

运算符 名称 描述 实例
x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false
x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true 5===”5” 返回 false
x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!==”5” 返回 true
x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false
x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true
x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false
x <= y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true

实例35:

  1. <?php
  2. $x=100;
  3. $y="100";
  4. var_dump($x == $y);
  5. echo "<br>";
  6. var_dump($x === $y);
  7. echo "<br>";
  8. var_dump($x != $y);
  9. echo "<br>";
  10. var_dump($x !== $y);
  11. echo "<br>";
  12. $a=50;
  13. $b=90;
  14. var_dump($a > $b);
  15. echo "<br>";
  16. var_dump($a < $b);
  17. ?>

逻辑运算符:

运算符 名称 描述 实例
x and y 如果 x 和 y 都为 true,则返回 true x=6 y=3 (x < 10 and y > 1) 返回 true
x or y 如果 x 和 y 至少有一个为 true,则返回 true x=6 y=3 (x6 or y
5) 返回 true
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6 y=3 (x6 xor y
3) 返回 false
x && y 如果 x 和 y 都为 true,则返回 true x=6 y=3 (x < 10 && y > 1) 返回 true
x || y 如果 x 和 y 至少有一个为 true,则返回 true x=6 y=3 (x5 || y
5) 返回 false
! x 如果 x 不为 true,则返回 true x=6 y=3 !(x==y) 返回 true

数组运算符:

运算符 名称 描述
x + y 集合 x 和 y 的集合
x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y 不相等 如果 x 不等于 y,则返回 true
x <> y 不相等 如果 x 不等于 y,则返回 true
x !== y 不恒等 如果 x 不等于 y,则返回 true

实例36:

  1. <?php
  2. $x = array("a" => "red", "b" => "green");
  3. $y = array("c" => "blue", "d" => "yellow");
  4. $z = $x + $y; // $x 和 $y 数组合并
  5. var_dump($z);
  6. var_dump($x == $y);
  7. var_dump($x === $y);
  8. var_dump($x != $y);
  9. var_dump($x <> $y);
  10. var_dump($x !== $y);
  11. ?>

三元运算符:

  1. (expr1) ? (expr2) : (expr3)

对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式expr1 ?: expr3 在 expr1求值为 TRUE 时返回 expr1,否则返回 expr3。

实例37:通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET[‘user’],否则返回 nobody

  1. <?php
  2. $test = '菜鸟教程';
  3. // 普通写法
  4. $username = isset($test) ? $test : 'nobody';
  5. echo $username, PHP_EOL;
  6. // PHP 5.3+ 版本写法
  7. $username = $test ?: 'nobody';
  8. echo $username, PHP_EOL;
  9. ?>
  10. 输出:
  11. 菜鸟教程
  12. 菜鸟教程

在 PHP7+ 版本多了一个 NULL 合并运算符 ??

实例38:

  1. <?php
  2. // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
  3. $username = $_GET['user'] ?? 'nobody';
  4. // 类似的三元运算符
  5. $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
  6. ?>

PHP条件语句

实例39:if语句

  1. <?php
  2. $t=date("H");
  3. if ($t<"20")
  4. {
  5. echo "Have a good day!";
  6. }
  7. ?>

实例40:if…else语句

  1. <?php
  2. $t=date("H");
  3. if ($t<"10")
  4. {
  5. echo "Have a good morning!";
  6. }
  7. elseif ($t<"20")
  8. {
  9. echo "Have a good day!";
  10. }
  11. else
  12. {
  13. echo "Have a good night!";
  14. }
  15. ?>

首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。

实例41:switch语句和break、default

  1. <?php
  2. $favcolor="red";
  3. switch ($favcolor)
  4. {
  5. case "red":
  6. echo "你喜欢的颜色是红色!";
  7. break;
  8. case "blue":
  9. echo "你喜欢的颜色是蓝色!";
  10. break;
  11. case "green":
  12. echo "你喜欢的颜色是绿色!";
  13. break;
  14. default:
  15. echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
  16. }
  17. ?>

PHP数组

实例42:数组

  1. <?php
  2. $cars=array("Volvo","BMW","Toyota");
  3. echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
  4. ?>

实例43:实例count() 函数用于返回数组的长度(元素的数量)

  1. <?php
  2. $cars=array("Volvo","BMW","Toyota");
  3. echo count($cars);
  4. ?>

实例44:for循环遍历数组

  1. <?php
  2. $cars=array("Volvo","BMW","Toyota");
  3. $arrlength=count($cars);
  4. for($x=0;$x<$arrlength;$x++)
  5. {
  6. echo $cars[$x];
  7. echo "<br>";
  8. }
  9. ?>

关联数组有两种创建方式:$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");或是$age['Peter']="35";$age['Ben']="37";$age['Joe']="43";

实例45:关联数组

  1. <?php
  2. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  3. echo "Peter is " . $age['Peter'] . " years old.";
  4. ?>

实例46:遍历关联数组

  1. <?php
  2. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  3. foreach($age as $x=>$x_value)
  4. {
  5. echo "Key=" . $x . ", Value=" . $x_value;
  6. echo "<br>";
  7. }
  8. ?>

PHP数组排序

PHP 数组排序函数:

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列

实例47:数组排序

  1. //数组中的元素按照字母升序排列
  2. <?php
  3. $cars=array("Volvo","BMW","Toyota");
  4. sort($cars);
  5. ?>
  6. //数组中的元素按照数字升序排列
  7. <?php
  8. $numbers=array(4,6,2,22,11);
  9. sort($numbers);
  10. ?>
  11. //数组中的元素按照字母降序排列
  12. <?php
  13. $cars=array("Volvo","BMW","Toyota");
  14. rsort($cars);
  15. ?>
  16. //数组中的元素按照数字降序排列
  17. <?php
  18. $numbers=array(4,6,2,22,11);
  19. rsort($numbers);
  20. ?>
  21. //根据数组的值,对数组进行升序排列
  22. <?php
  23. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  24. asort($age);
  25. ?>
  26. //根据数组的键,对数组进行升序排列
  27. <?php
  28. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  29. ksort($age);
  30. ?>
  31. //根据数组的值,对数组进行降序排列
  32. <?php
  33. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  34. arsort($age);
  35. ?>
  36. //根据数组的键,对数组进行降序排列
  37. <?php
  38. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  39. krsort($age);
  40. ?>

PHP超级全局变量

超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

PHP $GLOBALS

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

实例48:变量同样可以在函数外访问

  1. <?php
  2. $x = 75;
  3. $y = 25;
  4. function addition()
  5. {
  6. $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
  7. }
  8. addition();
  9. echo $z;
  10. ?>

PHP $_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

实例:如何使用$_SERVER

  1. <?php
  2. echo $_SERVER['PHP_SELF'];
  3. echo "<br>";
  4. echo $_SERVER['SERVER_NAME'];
  5. echo "<br>";
  6. echo $_SERVER['HTTP_HOST'];
  7. echo "<br>";
  8. echo $_SERVER['HTTP_REFERER'];
  9. echo "<br>";
  10. echo $_SERVER['HTTP_USER_AGENT'];
  11. echo "<br>";
  12. echo $_SERVER['SCRIPT_NAME'];
  13. ?>

$_SERVER 变量中的重要元素

元素/代码 描述
$_SERVER[‘PHP_SELF’] 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar
的脚本中使用 $_SERVER[‘PHP_SELF’] 将得到 /test.php/foo.bar。FILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
$_SERVER[‘GATEWAY_INTERFACE’] 服务器使用的 CGI 规范的版本;例如,”CGI/1.1”。
$_SERVER[‘SERVER_ADDR’] 当前运行脚本所在的服务器的 IP 地址。
$_SERVER[‘SERVER_NAME’] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
$_SERVER[‘SERVER_SOFTWARE’] 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
$_SERVER[‘SERVER_PROTOCOL’] 请求页面时通信协议的名称和版本。例如,”HTTP/1.0”。
$_SERVER[‘REQUEST_METHOD’] 访问页面使用的请求方法;例如,”GET”, “HEAD”,”POST”,”PUT”。
$_SERVER[‘REQUEST_TIME’] 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
$_SERVER[‘QUERY_STRING’] query string(查询字符串),如果有的话,通过它进行页面访问。
$_SERVER[‘HTTP_ACCEPT’] 当前请求头中 Accept: 项的内容,如果存在的话。
$_SERVER[‘HTTP_ACCEPT_CHARSET’] 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:”iso-8859-1,*,utf-8”。
$_SERVER[‘HTTP_HOST’] 当前请求头中 Host: 项的内容,如果存在的话。
$_SERVER[‘HTTP_REFERER’] 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
$_SERVER[‘HTTPS’] 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
$_SERVER[‘REMOTE_ADDR’] 浏览当前页面的用户的 IP 地址。
$_SERVER[‘REMOTE_HOST’] 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
$_SERVER[‘REMOTE_PORT’] 用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径。
$_SERVER[‘SERVER_ADMIN’] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com) )
$_SERVER[‘SERVER_PORT’] Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
$_SERVER[‘SERVER_SIGNATURE’] 包含了服务器版本和虚拟主机名的字符串。
$_SERVER[‘PATH_TRANSLATED’] 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
$_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
$_SERVER[‘SCRIPT_URI’] URI 用来指定要访问的页面。例如 “/index.html”。

PHP $_REQUEST

PHP $_REQUEST 用于收集HTML表单提交的数据。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据

实例49:

  1. <html>
  2. <body>
  3. <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  4. Name: <input type="text" name="fname">
  5. <input type="submit">
  6. </form>
  7. <?php
  8. $name = $_REQUEST['fname'];
  9. echo $name;
  10. ?>
  11. </body>
  12. </html>

PHP $_POST

PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”post”。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据

实例50:

  1. <html>
  2. <body>
  3. <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  4. Name: <input type="text" name="fname">
  5. <input type="submit">
  6. </form>
  7. <?php
  8. $name = $_POST['fname'];
  9. echo $name;
  10. ?>
  11. </body>
  12. </html>

PHP $_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”get”。

$_GET 也可以收集URL中发送的数据。

假定我们有一个包含参数的超链接HTML页面实例51:

  1. <html>
  2. <body>
  3. <a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>
  4. </body>
  5. </html>

当用户点击链接 “Test $GET”, 参数 “subject” 和 “web” 将发送至”test_get.php”,你可以在 “test_get.php” 文件中使用 $_GET 变量来获取这些数据。

以下实例显示了 “test_get.php” 文件的代码

  1. <html>
  2. <body>
  3. <?php
  4. echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
  5. ?>
  6. </body>
  7. </html>

PHP循环

PHP 中,提供了下列循环语句:

  • while - 只要指定的条件成立,则循环执行代码块
  • do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
  • for - 循环执行代码块指定的次数
  • foreach - 根据数组中每个元素来循环代码块

实例52:while循环

  1. <html>
  2. <body>
  3. <?php
  4. $i=1;
  5. while($i<=5)
  6. {
  7. echo "The number is " . $i . "<br>";
  8. $i++;
  9. }
  10. ?>
  11. </body>
  12. </html>
  13. 输出:
  14. The number is 1
  15. The number is 2
  16. The number is 3
  17. The number is 4
  18. The number is 5

实例53:do…while循环

  1. <html>
  2. <body>
  3. <?php
  4. $i=1;
  5. do
  6. {
  7. $i++;
  8. echo "The number is " . $i . "<br>";
  9. }
  10. while ($i<=5);
  11. ?>
  12. </body>
  13. </html>
  14. 输出:
  15. The number is 2
  16. The number is 3
  17. The number is 4
  18. The number is 5
  19. The number is 6

实例54:for循环

  1. <?php
  2. for ($i=1; $i<=5; $i++)
  3. {
  4. echo "数字为 " . $i . PHP_EOL;
  5. }
  6. ?>
  7. 输出:
  8. 数字为 1
  9. 数字为 2
  10. 数字为 3
  11. 数字为 4
  12. 数字为 5

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值

实例55:foreach循环

  1. <?php
  2. $x=array("Google","Runoob","Taobao");
  3. foreach ($x as $value)
  4. {
  5. echo $value . PHP_EOL;
  6. }
  7. ?>
  8. 输出:
  9. Google
  10. Runoob
  11. Taobao

实例56:输出给定数组键与值的循环

  1. <?php
  2. $x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");
  3. foreach ($x as $key => $value)
  4. {
  5. echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
  6. }
  7. ?>
  8. 输出:
  9. key 为 1,对应的 value 为 Google
  10. key 为 2,对应的 value 为 Runoob
  11. key 为 3,对应的 value 为 Taobao

实例57:使用for循环实现冒泡排序

  1. <?php
  2. $arr = array(5,3,6,2,8,10);
  3. for($i = count($arr)-1;$i>=0;$i--){
  4. for($j = 0 ; $j < $i ; $j++){
  5. if($arr[$j+1] > $arr[$j] ){
  6. $aa = $arr[$j+1];
  7. $arr[$j+1] = $arr[$j];
  8. $arr[$j] = $aa;
  9. }
  10. }
  11. }
  12. print_r($arr);
  13. ?>

PHP函数

实例58:函数创建

  1. <?php
  2. function writeName()
  3. {
  4. echo "Kai Jim Refsnes";
  5. }
  6. echo "My name is ";
  7. writeName();
  8. ?>

实例59:添加参数

  1. <?php
  2. function writeName($fname)
  3. {
  4. echo $fname . " Refsnes.<br>";
  5. }
  6. echo "My name is ";
  7. writeName("Kai Jim");
  8. echo "My sister's name is ";
  9. writeName("Hege");
  10. echo "My brother's name is ";
  11. writeName("Stale");
  12. ?>
  13. 输出:
  14. My name is Kai Jim Refsnes.
  15. My sister's name is Hege Refsnes.
  16. My brother's name is Stale Refsnes.

实例60:添加函数进阶

  1. <?php
  2. function writeName($fname,$punctuation)
  3. {
  4. echo $fname . " Refsnes" . $punctuation . "<br>";
  5. }
  6. echo "My name is ";
  7. writeName("Kai Jim",".");
  8. echo "My sister's name is ";
  9. writeName("Hege","!");
  10. echo "My brother's name is ";
  11. writeName("Ståle","?");
  12. ?>
  13. 输出:
  14. My name is Kai Jim Refsnes.
  15. My sister's name is Hege Refsnes!
  16. My brother's name is Ståle Refsnes?

实例61:返回值

  1. <?php
  2. function add($x,$y)
  3. {
  4. $total=$x+$y;
  5. return $total;
  6. }
  7. echo "1 + 16 = " . add(1,16);
  8. ?>
  9. 输出:
  10. 1 + 16 = 17

PHP魔术变量

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

实例62:LINE

  1. <?php
  2. echo '这是第 " ' . __LINE__ . ' " 行';
  3. ?>
  4. 输出:
  5. 这是第 “ 2 ” 行

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径

实例63:FILE

  1. <?php
  2. echo '该文件位于 " ' . __FILE__ . ' " ';
  3. ?>
  4. 输出:
  5. 该文件位于 “ E:\wamp\www\test\index.php ”

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)

实例64:DIR

  1. <?php
  2. echo '该文件位于 " ' . __DIR__ . ' " ';
  3. ?>
  4. 输出:
  5. 该文件位于 “ E:\wamp\www\test ”

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

实例65:FUNCTION

  1. <?php
  2. function test() {
  3. echo '函数名为:' . __FUNCTION__ ;
  4. }
  5. test();
  6. ?>
  7. 输出:
  8. 函数名为:test

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。

实例66:CLASS

  1. <?php
  2. class test {
  3. function _print() {
  4. echo '类名为:' . __CLASS__ . "<br>";
  5. echo '函数名为:' . __FUNCTION__ ;
  6. }
  7. }
  8. $t = new test();
  9. $t->_print();
  10. ?>
  11. 输出:
  12. 类名为:test
  13. 函数名为:_print

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

实例67:

  1. <?php
  2. class Base {
  3. public function sayHello() {
  4. echo 'Hello ';
  5. }
  6. }
  7. trait SayWorld {
  8. public function sayHello() {
  9. parent::sayHello();
  10. echo 'World!';
  11. }
  12. }
  13. class MyHelloWorld extends Base {
  14. use SayWorld;
  15. }
  16. $o = new MyHelloWorld();
  17. $o->sayHello();
  18. ?>
  19. 输出:
  20. Hello World!

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

实例68:METHOD

  1. <?php
  2. function test() {
  3. echo '函数名为:' . __METHOD__ ;
  4. }
  5. test();
  6. ?>
  7. 输出:
  8. 函数名为:test

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

实例69:NAMESPACE

  1. <?php
  2. namespace MyProject;
  3. echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
  4. ?>
  5. 输出:
  6. 命名空间为:"MyProject"