PHP语法
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。
- PHP 脚本以 <?php 开头,以 ?> 结尾。
- PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来,PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。
- PHP有两种在浏览器输出文本的基础指令:echo 和 print。
- 注释:
<?php
// 这是 PHP 单行注释
# 这也是单行注释
/*
这是
PHP 多行
注释
*/
?>
PHP 变量
- 变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始 , 只能包含字母数字字符以及下划线, 不能包含空格, 是区分大小写的, $y 和 $Y 是两个不同的变量。
- PHP 有四种不同的变量作用域:
local (局部)
global(全局)
static(静态)
parameter
<?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";
?>
运行结果
- global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,需要在函数中的变量前加上 global 关键字。
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y; //或 $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
- Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。要做到这一点,请在您第一次声明变量时使用 static 关键字:
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest();
?> //012
- PHP 大小写敏感
在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。
4.echo , print 和 print_r的区别:
echo - 可以输出一个或多个字符串
print - 只能输出简单类型变量的值,如int,string
print_r - 可以输出复杂类型变量的值,如数组,对象
提示:echo输出的速度比print快,echo是PHP语句,没有返回值,print和print_r是PHP函数,函数有返回值。
print返回值为1(int类型),print_r返回值为true(bool类型)。
- echo
?php
$txt1="Learn PHP";
$txt2="w3cschool.cn";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br />";
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
echo "<h2>PHP 很有趣!</h2>";
echo "Hello world!<br>";
?>
/*
Learn PHP
Study PHP at w3cschool.cn
My car is a Volvo
*/
- print_r
print_r 显示关于一个变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。
如果给出的是 array,将会按照一定格式显示键和元素。object与数组类似。
使用时必须加上括号:print_r()。
小提示:print_r()会将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
- PHP var_dump() 函数返回变量的数据类型和值:
<!DOCTYPE html>
<html>
<body>
<?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);
?>
</body>
</html>
- PHP 数据类型
- 类型比较
- PHP 常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting"
// 不区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com", true);
echo greeting; // 输出 "欢迎访问 Runoob.com"
?>
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
- PHP 字符串函数
- 并置运算符
并置运算符 (.) 用于把两个字符串值连接起来。
运算符 | 名称 | 例子 |
---|---|---|
. | 串接 | $txt1 = “Hello” $txt2 = $txt1 . " world!" 现在 $txt2 包含 “Hello world!” |
.= | 串接赋值 | $txt1 = “Hello” $txt1 .= " world!" 现在 $txt1 包含 “Hello world!” |
<!DOCTYPE html>
<html>
<body>
<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出 Hello world!
echo "<br>";
$x="Hello";
$x .= " world!";
echo $x; // 输出 Hello world!
?>
</body>
</html>
- strlen() 函数
strlen() 函数返回字符串的长度(字符数)。
<?php
echo strlen("Hello world!");
?> //输出12
- strpos()函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
<?php
echo strpos("Hello world!","world");
?> //输出6,第一个从0开始
- str_word_cuont()函数
str_word_count() 函数对字符串中的单词进行计数
<?php
echo str_word_count("Hello world!"); // 输出 2
?>
- strrev() 函数
strrev函数反转字符串:
<?php
echo strrev("Hello world!"); // 输出 !dlrow olleH
?>
- str_replace() 函数
用一些字符串替换字符串中的另一些字符。
<?php
echo str_replace("world", "Kitty", "Hello world!"); // 输出 Hello Kitty!
?>
PHP运算符
在 PHP 中,赋值运算符 = 用于给变量赋值。
- 整除运算符intdiv()
PHP7+ 版本新增整除运算符 intdiv(),使用实例:
<?php
var_dump(intdiv(10, 3));
?> //int(3)
a .= b | a = a . b | 连接两个字符串 |
---|
- PHP 递增/递减运算符
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
– x | 预递减 | x 减 1,然后返回 x |
x – | 后递减 | 返回 x,然后 x 减 1 |
<?php
$x=10;
echo ++$x; // 输出11
$y=10;
echo $y++; // 输出10
$z=5;
echo --$z; // 输出4
$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 |
<!DOCTYPE html>
<html>
<body>
<?php
$x=100;
$y="100";
var_dump($x == $y); // returns true because values are equal
echo "<br>";
var_dump($x === $y); // returns false because types are not equal
echo "<br>";
var_dump($x != $y); // returns false because values are equal
echo "<br>";
var_dump($x !== $y); // returns true because types are not equal
echo "<br>";
$a=50;
$b=90;
var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
?>
</body>
</html>
- PHP逻辑运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
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 (x== 6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x== 6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
xlly | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 |
! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true |
- 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 |
<!DOCTYPE html>
<html>
<body>
<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // union of $x and $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);
?>
</body>
</html>
运行结果:
array(4) { ["a"]=> string(3) "red" ["b"]=> string(5) "green" ["c"]=> string(4) "blue" ["d"]=> string(6) "yellow" }
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
- 三元运算符
语法格式:
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
<?php
$test = 'w3cschool在线教程';
// 普通写法
$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+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式如下:
$c = $a <=> $b;
解析如下:
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。
- 运算符优先级
运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。
<?php
// 优先级: && > = > and
// 优先级: || > = > or
$a = 3;
$b = false;
$c = $a or $b;
var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d); //这里的 $d 就是 boolean 值 true
?>
输出结果:
int(3)
bool(true)