- PHP 语法
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。
- 基本的 PHP 语法
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 <?php 开始,以 ?> 结束:
<?php
// PHP 代码
?>
PHP 文件的默认文件扩展名是 ".php"。
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
- 例
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
- PHP 中的注释
- 例
<!DOCTYPE html> <html> <body> <?php // 这是 PHP 单行注释 /* 这是 PHP 多行 注释 */ ?> </body> </html>
- PHP 变量
- 变量是用于存储信息的"容器":
- 例
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
与代数类似
x=5
y=6
z=x+y
在代数中,我们使用字母(如 x),并给它赋值(如 5)。
从上面的表达式 z=x+y ,我们可以计算出 z 的值为 11。
在 PHP 中,这些字母被称为变量。
变量是用于存储数据的容器。
变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、carname、totalvolume)。
PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
- 创建(声明)PHP 变量
PHP 没有声明变量的命令。
变量在您第一次赋值给它的时候被创建:
- 例
<?php $txt="Hello world!"; $x=5; $y=10.5; ?>
在上面的语句执行中,变量 txt 将保存值 Hello world!,且变量 x 将保存值 5。
- PHP 是一门弱类型语言
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
- PHP 变量作用域
变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有四种不同的变量作用域:
- local
- global
- static
- parameter
- 局部和全局作用域
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:
- 例
<?php $x=5; // 全局变量 function myTest() { $y=10; // 局部变量 echo "<p>测试函数内变量:<p>"; echo "变量 x 为: $x"; echo "<br>"; echo "变量 y 为: $y"; } myTest(); echo "<p>测试函数外变量:<p>"; echo "变量 x 为: $x"; echo "<br>"; echo "变量 y 为: $y"; ?>
在上例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。
当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。
然后我们在myTest()函数外输出两个变量的值,函数将会输出全局部变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。
你可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。- PHP global 关键字
global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
- 例
<?php $x=5; $y=10; function myTest() { global $x,$y; $y=$x+$y; } myTest(); echo $y; // 输出 15 ?>
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
上例可以写成这样:
- 例
<?php $x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest(); echo $y; ?>
- Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:
- 例
<?php function myTest() { static $x=0; echo $x; $x++; } myTest(); myTest(); myTest(); ?>
然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注释:该变量仍然是函数的局部变量。
- 参数作用域
参数是通过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,作为函数声明的一部分:
- 例
<?php function myTest($x) { echo $x; } myTest(5); ?>
- PHP echo/print
在 PHP 中有两个基本的输出方式: echo 和 print。
- PHP echo 和 print 语句
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
总结:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
- PHP echo 语句
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
显示字符串
使用 echo 命令输出字符串(字符串可以包含 HTML 标签):
- 例
<?php echo "<h2>PHP is fun!</h2>"; echo "Hello world!<br>"; echo "I'm about to learn PHP!<br>"; echo "This", " string", " was", " made", " with multiple parameters."; ?>
显示变量
使用 echo 命令输出变量和字符串:
- 例
<?php $txt1="Learn PHP"; $txt2="w3cschool.cc"; $cars=array("Volvo","BMW","Toyota"); echo $txt1; echo "<br>"; echo "Study PHP at $txt2"; echo "My car is a {$cars[0]}"; ?>
- PHP print 语句
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
显示字符串
使用 print 命令输出字符串(字符串可以包含 HTML 标签):
- 例
<?php print "<h2>PHP is fun!</h2>"; print "Hello world!<br>"; print "I'm about to learn PHP!"; ?>
显示变量
使用 print 命令输出变量和字符串:
- 例
<?php $txt1="Learn PHP"; $txt2="w3cschool.cc"; $cars=array("Volvo","BMW","Toyota"); print $txt1; print "<br>"; print "Study PHP at $txt2"; print "My car is a {$cars[0]}"; ?>
- PHP 运算符
在 PHP 中,赋值运算符 = 用于给变量赋值。
在 PHP 中,算术运算符 + 用于把值加在一起。
- 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 |
1 |
- x |
取反 |
x 取反 |
- 2 |
|
a . b |
并置 |
连接两个字符串 |
"Hi" . "Ha" |
HiHa |
使用不同算术运算符得到的不同结果:
- 例
<?php $x=10; $y=6; echo ($x + $y); // 输出16 echo "<br>"; echo ($x - $y); // 输出4 echo "<br>"; echo ($x * $y); // 输出60 echo "<br>"; echo ($x / $y); // 输出1.6666666666667 echo "<br>"; echo ($x % $y); // 输出4 ?>
PHP7+ 版本新增整除运算符 intdiv(),例:
<?php
var_dump(intdiv(10, 3));
?>
输出: int(3)
- PHP 赋值运算符
在 PHP 中,基本的赋值运算符是 "="。它意味着左操作数被设置为右侧表达式的值。也就是说,"$x = 5" 的值是 5。
运算符 |
等同于 |
描述 |
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 |
连接两个字符串 |
使用不同赋值运算符得到的不同结果:
- 例
<?php $x=10; echo $x; // 输出10 echo "<br>"; $y=20; $y += 100; echo $y; // 输出120 echo "<br>"; $z=50; $z -= 25; echo $z; // 输出25 echo "<br>"; $i=5; $i *= 6; echo $i; // 输出30 echo "<br>"; $j=10; $j /= 5; echo $j; // 输出2 echo "<br>"; $k=15; $k %= 4; echo $k; // 输出3 ?>
使用不同字符串运算符得到的不同结果:
- 例
<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出Hello world!
echo "<br>";
$x="Hello";
$x .= " world!";
echo $x; // 输出Hello world!
?>
- PHP 递增/递减运算符
运算符 |
名称 |
描述 |
++ x |
预递增 |
x 加 1,然后返回 x |
x ++ |
后递增 |
返回 x,然后 x 加 1 |
-- x |
预递减 |
x 减 1,然后返回 x |
x -- |
后递减 |
返回 x,然后 x 减 1 |
使用递增/递减运算符得到的结果:
- 例
<?php
$x=10;
echo ++$x; // 输出11
echo "<br>";
$y=10;
echo $y++; // 输出10
echo "<br>";
$z=5;
echo --$z; // 输出4
echo "<br>";
$i=5;
echo $i--; // 输出5
?>
- PHP 比较运算符
比较操作符可以比较两个值:
运算符 |
名称 |
描述 |
实例 |
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 |
使用一些比较运算符得到的不同结果:
- 例
<?php
$x=100;
$y="100";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";
$a=50;
$b=90;
var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
?>
- PHP 逻辑运算符
运算符 |
名称 |
描述 |
实例 |
x and y |
与 |
如果 x 和 y 都为 true,则返回 true |
x=6 |
x or y |
或 |
如果 x 和 y 至少有一个为 true,则返回 true |
x=6 |
x xor y |
异或 |
如果 x 和 y 有且仅有一个为 true,则返回 true |
x=6 |
x && y |
与 |
如果 x 和 y 都为 true,则返回 true |
x=6 |
x || y |
或 |
如果 x 和 y 至少有一个为 true,则返回 true |
x=6 |
! x |
非 |
如果 x 不为 true,则返回 true |
x=6 |
- PHP 数组运算符
运算符 |
名称 |
描述 |
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 |
- 三元运算符
使用一些数组运算符得到的不同结果:
- 例
<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
echo "<br>";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x <> $y);
echo "<br>";
var_dump($x !== $y);
?>
另一个条件运算符是"?:"(或三元)运算符 。
- 语法格式
(expr1) ? (expr2) : (expr3);
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
- 例
以下通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET['user'],否则返回 nobody:
<?php
$test = 'php中文网';
// 普通写法
$username = isset($test) ? $test : 'nobody';
echo $username, PHP_EOL;
// PHP 5.3+ 版本写法
$username = $test ?: 'nobody';
echo $username, PHP_EOL;
?>
注意:PHP_EOL 是一个换行符,兼容更大平台。
在 PHP7+ 版本多了一个 NULL 合并运算符,如下
<?php
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
- 组合比较符(PHP7+)
PHP7+ 支持组合比较符,如下:
<?php
// 整型
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点型
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
- PHP 数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
- PHP 字符串
一个字符串是一串字符的序列,就像 "Hello world!"。
你可以将任何文本放在单引号和双引号中:
- 例
<?php $x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; echo $x; ?>
- PHP 整型
整数是一个没有小数的数字。
整数规则:
- 整数必须至少有一个数字 (0-9)
- 整数不能包含逗号或空格
- 整数是没有小数点的
- 整数可以是正数或负数
- 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
PHP var_dump() 函数返回变量的数据类型和值:
- 例
<?php $x = 5985; var_dump($x); echo "<br>"; $x = -345; // 负数 var_dump($x); echo "<br>"; $x = 0x8C; // 十六进制数 var_dump($x); echo "<br>"; $x = 047; // 八进制数 var_dump($x); ?>
- PHP 浮点型
浮点数是带小数部分的数字,或是指数形式。
PHP var_dump() 函数返回变量的数据类型和值:
- 例
<?php $x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3; var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x); ?>
- PHP 布尔型
布尔型可以是 TRUE 或 FALSE。
$x=true;
$y=false;
布尔型通常用于条件判断。在接下来的章节中你会学到更多关于条件控制的教程。
- PHP 数组
数组可以在一个变量中存储多个值。
在下例中创建了一个数组, 然后使用 PHP var_dump() 函数返回数组的数据类型和值:
- 例
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
- PHP 对象
对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:
- 例
<?php class Car { var $color; function Car($color="green") { $this->color = $color; } function what_color() { return $this->color; } } function print_vars($obj) { foreach (get_object_vars($obj) as $prop => $val) { echo " $prop = $val "; } } // instantiate one object $herbie = new Car("white"); // show herbie properties echo "herbie: Properties "; print_vars($herbie); ?>
以上例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
你将会在接下来的章节中学会更多关于对象的知识。
- PHP NULL 值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:
-
例
<?php $x="Hello world!"; $x=null; var_dump($x); ?>
PHP 条件语句
在您编写代码时,经常会希望为不同的决定执行不同的动作。您可以在代码中使用条件语句来实现这一点。
在 PHP 中,我们可以使用以下条件语句:
- if 语句 - 如果指定条件为真,则执行代码
- if...else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
- if...elseif....else 语句 - 选择若干段代码块之一来执行
- switch 语句 - 语句多个代码块之一来执行
-
if 语句
if 语句用于在指定条件为 true 时执行代码。
-
语法
if (条件) {
当条件为 true 时执行的代码;
}
-
例
<?php $t=date("H"); if ($t<"20") { echo "Have a good day!"; } ?>/*将输出 "Have a good day!",如果当前时间 (HOUR) 小于 20:*/
-
if...else 语句
使用 if....else 语句在条件为 true 时执行代码,在条件为 false 时执行另一段代码。
-
语法
if (条件) { 条件为 true 时执行的代码; } else { 条件为 false 时执行的代码; }
-
例
<?php
$t=date("H");
if ($t<"20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>/*将输出 "Have a good day!",如果当前时间 (HOUR) 小于 20,否则输出 "Have a good night!":
*/
-
if...elseif....else 语句
使用 if....elseif...else 语句来选择若干代码块之一来执行。
-
语法
if (条件) { 条件为 true 时执行的代码; } elseif (condition) { 条件为 true 时执行的代码; } else { 条件为 false 时执行的代码; }
-
例
<?php $t=date("H"); if ($t<"10") { echo "Have a good morning!"; } elseif ($t<"20") { echo "Have a good day!"; } else { echo "Have a good night!"; } ?>/*将输出 "Have a good morning!",如果当前时间 (HOUR) 小于 10,如果当前时间小于 20,则输出 "Have a good day!"。否则将输出 "Have a good night!":*/
-
switch 语句
用于基于不同条件执行不同动作。
如果您希望有选择地执行若干代码块之一,就使用 Switch 语句。
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。
-
语法
switch (expression)
{
case label1:
code to be executed if expression = label1;
break;
case label2:
code to be executed if expression = label2;
break;
default:
code to be executed
if expression is different
from both label1 and label2;
}
工作原理:
- 对表达式(通常是变量)进行一次计算
- 把表达式的值与结构中 case 的值进行比较
- 如果存在匹配,则执行与 case 关联的代码
- 代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
- 如果没有 case 为真,则使用 default 语句
-
例
<?php switch ($x) { case 1: echo "Number 1"; break; case 2: echo "Number 2"; break; case 3: echo "Number 3"; break; default: echo "No number between 1 and 3"; } ?> </body> </html>
- PHP函数
PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。
- PHP 用户定义函数
除了内建的 PHP 函数,我们可以创建我们自己的函数。
- 函数是可以在程序中重复使用的语句块。
- 页面加载时函数不会立即执行。
- 函数只有在被调用时才会执行。
- 在 PHP 创建用户定义函数
用户定义的函数声明以关单 "function" 开头:
-
语法
function functionName() { 被执行的代码; }
函数名能够以字母或下划线开头(而非数字)。函数名对大小写不敏感。
提示:函数名应该能够反映函数所执行的任务。
-
PHP 函数参数
可以通过参数向函数传递信息。参数类似变量。
参数被定义在函数名之后,括号内部。您可以添加任意多参数,只要用逗号隔开即可。也可以给参数写上固定数值作为默认参数 function fn($num=10){ 被执行的代码;}
-
PHP 关联数组
关联数组是使用您分配给数组的指定键的数组。
有两种创建关联数组的方法: $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
或者:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
随后可以在脚本中使用指定键:
-
例
<?php $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); echo "Peter is " . $age['Peter'] . " years old."; ?>
-
历关联数组
遍历并输出关联数组的所有值,使用 foreach 循环
-
例
<?php $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?>