PHP(外文名:PHP:Hypertext Preprocessor,中文名:“超文本预处理器”)是一种免费开源的、创建动态交互性站点的强有力的服务器端脚本语言
<h1>My Name is LiSi!</h1>
<script>
console.log("This message is from msg.php!")
</script>
<?php // PHP 的开始标记,表示从此标记开始,进入PHP 模式。
phpinfo(); // PHP 代码
?> // PHP 的结束标记,表示从开始标记到结束标记,之间的内容是PHP 模式
// 之后的内容依然被PHP 解释引擎认为是纯文本字符串。
- 在PHP 文件中,可以与HTML 和JavaScript 混编。
- 开始标记
<?php
表示进入PHP 模式,结束标记?>
,标识退出PHP 模式。 - PHP 模式之外的内容会被作为字符输出到浏览器中。
- HTML 或JavaScript 对于PHP 来说就是纯文本字符串。
基础语法
PHP 语句以分号结尾(;
)
注释
单行注释
phpinfo(); // 该函数会显示PHP 配置信息
多行注释
/*
这是多行注释!
以下语句表示PHP 配置信息
*/
phpinfo();
空白字符
空白符包括:
空白字符 | 表达 |
---|---|
空格 | <space> |
TAB 制表符 | \t |
回车换行 | \r\n |
这些空白字符在PHP 中都是无关紧要的,可以将一个语句展开成任意行,或者紧缩在一行,空格与空行的合理运用可以增强代码的清晰性与可读性,如果运用不合理反而会对阅读产生负担!
但是,不能是用空白符打断PHP 的关键字,例如函数名,语句名,变量名,类名,方法名等等。
变量
变量是用于临时存储值的容器,通过变量名能够访问到变量值,变量包含四个部分内容:
- 变量名
- 变量值
- 数据类型
- 内存空间
PHP 脚本语言是一种弱数据类型语言,变量或常量的数据类型由程序的上下文决定,给一个变量赋予什么样的值,就是什么数据类型。
1.强数据类型要求所有变量要先定义,定义必须声明数据类型,且指定类型的变量只能接受与类型相匹配的值。简而言之,强数据类型在编译前确认。
2.弱数据类型与强数据类型相反,没有明显的类型,随环境变换自身的数据类型。弱数据类型是在编译时确定数据类型。
命名方式
变量名是严格区分大小写的。以下变量是完全不同的:
$name;
$Name;
$NAME;
$叫作美元符,英文单词:dollar。PHP的变量必须以美元符开始。说明搞PHP有”钱”途。
变量名由字母、数字、下划线组成,并且不能以数字开头,也不能包含空白字符、特殊字符等其他字符。
$name = "LISI";
$name1 = "zs";
$my_name = "lucy";
$_name = "DSB";
变量命名时,建议使用驼峰式命名法或者下划线命名法,做到变量名的"见名知意"。
$firstName;
$LastName;
$first_name;
$last_name;
PHP 中有一些标识符是系统定义的,也称为关键字,是PHP 语言的组成部分,因此不建议使用它们中的任何一个作为变量名,包括函数名,类名等。
$echo; //建议不要使用
$print_r //建议不要使用
变量生命和初始化
直接赋值,直接使用
echo $username; // Notice: Undefined variable: username
$username = "li";
echo $username;
变量释放
unset() 函数释放指定的变量。
$username = "JayChou";
echo $username;
unset($username);
echo $username; //Notice: Undefined variable: username
可变变量
可变变量,一个变量的名字可以动态的设置和使用。$$
是php 的特性,也是产生php 中变量覆盖漏洞的原因之一。
$username = "JayChou";
$JayChou = "I am from China!";
// echo $username; // $JayChou
// echo $JayChou; // I am from China!
// echo $$username; // I am from China! $($username) -> $JayChou
$$username = "i love php!";
echo $JayChou;
数据类型
变量类型是指保存在该变量中的数据的数据类型,在计算机编程语言世界中每个数据都有它的类型。
具有相同类型的数据才能被彼此相互操作。
在强类型的语言中例如C 语言,变量要通过声明指定类型,然后才可以存储对应指定的数据,就好比现实生活中在制作一个柜子之前,就要决定好这个柜子的类型,是书柜那么以后就只能用来存书,是衣柜以后就只能用来存衣服。
但是PHP 是一种弱类型的语言,和其他语言不同的是,变量或者常量的数据类型由程序的上下文决定,不需要事先声明类型。一个柜子,要是往里面存书籍那么他就是书柜;要是往里面存放衣服,那么它就是衣柜,根本不需要事先说明这个是书柜还是衣柜,一切根据实际需要使用即可。
可以将数据的变量类型输出,使用的函数var_dump()。
$name = "lisi"; // string
$sex = true; // bool
$age = 24; // int
$score = 59.9; // float
// echo $name;
// echo $sex; // 1
// var_dump($sex);
// var_dump($score);
var_dump($name);
bool
布尔类型,这个是最简单的类型,布尔型表达了true 或false,即真或假。
$a = true;
$b = false;
var_dump($b);
进行if 判断的时候,如果表达式不是bool 类型的值,会有类型转换,其他类型的值转换成布尔类型的值。大多数的值是被认为是true,少部分以下值被认为是false。
bool(false)
int(0)
float(0)
string(0)""
string(1)"0"
array(0){}
NULL
int
整型,存储整数。
$age = 24;
var_dump($age);
float
浮点型,也称double,指包含小数的数。
$score = 99.9;
var_dump($score);
string
字符串是有序的一系列字符。字符串可以使用==单引号、双引号、定界符==三种方法来定义。
单引号定义字符串:
-
单引号定义的字符串中不能包含单引号,如果包含,需要转义
\'
。 -
单引号中的变量不会被识别。
$name = 'JauChou';
$msg = 'Welcome, ';
echo $msg.$name; // . 运算符,在PHP 中代表字符串拼接。
双引号定义字符串:
-
双引号中可以包含单引号,双引号中包含双引号,需要转义
\"
。 -
PHP 会解析双引号之间的变量,最好用
{}
将变量名括起来。
$username = "JayChou";
$message = "Welcome, {$username}";
echo $message;
定界符定义字符串:
- 当需要定义输出大段字符串时,并且该字符串中有超多特殊字符,包括单引号,双引号等等。
- 定界符定义的字符串中的单双引号,还有大部分特殊字符不需要进行转义。
- 定界符开始标识符
<<< + 标志
,标志建议大写字母,并且具备一定的语义。 - 定界符结束标示符
标志 + ;
,结束标识符之后,只能有换行回车。 - 标志的命名规则,字母、数字、下划线,并且不能以数字开始。
- 定界符中的
$
同样会识别成变量,变量名要用{}
括起来。
$name = "JayChou";
$msg = <<<JayChou
<h1>My Name is <span style = "color:yellow">{$name}</span>!</h1>
<script>
console.log('This message is from info.php!')
</script>
JayChou;
echo $msg;
常量
常量就是长久不变的值,常量在代码中的定义,以及书写方式如下所示:
define(常量名, 常量值)
1、常量名可以小写,但是通常大写
2、常量名可以不加引号,但是通常加上引号
3、在字符串中调用常量的时候,必须在引号外面
4、常量名建议只用字母和下划线
define("SEX","man");
echo SEX;
PHP 定义好了可以直接使用的常量,一般代表特殊的含义。魔术常量是预定义常量中比较特殊的一类。
常量名 | 常量值 |
---|---|
__FILE__ | 当前的文件名,完整的路径。 |
__LINE__ | 当前行号 |
__FUNCTION__ | 当前的函数名 |
__CLASS__ | 当前的类名 |
__METHOD__ | 当前对象的方法名 |
PHP_OS | 操作系统类型 |
PHP_VERSION | 当前PHP 的版本 |
DIRECTORY_SEPARATOR | 目录的分隔符。 |
运算符
算术运算符
例子 | 名称 | 结果 |
---|---|---|
-$a | 取反 | $a 的负值 |
$a + $b | 加法 | $a和$b 的和 |
$a - $b | 减法 | $a 和$b 的差 |
$a*$b | 乘法 | $a 和$b 的积 |
$a / $b | 除法 | $a 除以$b 的商 |
$a % $b | 取模,取余 | $a 除以$b 的余数 |
++ $a | 前加 | $a 的值加一,然后返回$a |
$a++ | 后加 | 返回$a,然后将$a 的值加一 |
–$a | 前减 | $a 的值减一, 然后返回$a |
$a– | 后减 | 返回$a,然后将$a 的值减一 |
字符串运算符
字符串运算符完成的主要工作,就是字符串拼接。
在JS 语言中,字符串拼接用+,运算符. 的作用是访问对象中的属性或者方法。
PHP 中,使用.
进行字符串拼接。PHP 中.
也叫连接运算符。
<?php
$name = "JayChou";
$str = "Hello,".$name;
//$str = "Hello,"+$name;
var_dump($str);
?>
赋值运算符
左边的操作数必须是变量,右边可以是一个表达式,也可以是一个值,一个变量等等。
作用:将右边表达式的值赋给左边变量。
<?php
$a = 10;
$b = 3;
$a += $b; // $a+=$b 相当于 $a=$a+$b,其他赋值运算符与此类似
// $a -= $b;
// $a *= $b;
// $a /= $b;
// $a %= $b;
$a .= $b;
echo $a;
比较运算符
对操作数(按照比较运算符的要求,规则)进行比较后,得到返回值(boolean)。
如果比较出的结果满足比较运算符的要求那么结果就是true(真,成立,满足),否则就是false (假,不成立,不满足)。
例子 | 说明 | 备注 |
---|---|---|
$a == $b | 等于 | |
$a === $b | 全等 | 值相等并且数据类型相同 |
$a != $b | 不等 | |
$a <> $b | 不等 | |
$a !== $b | 不全等 | |
$a < $b | 小于 | |
$a > $b | 大于 | |
$a <= $b | 小于等于 | |
$a >= $b | 大于等于 |
<?php
$a = 5;
$b = 3;
$c = $a == $b;
$c = $a === $b;
$c = $a != $b;
$c = $a <> $b;
$c = $a !== $b;
$c = $a > $b;
$c = $a >= $b;
$c = $a < $b;
$c = $a <= $b;
var_dump($c);
?>
PHP 中规定:使用echo 输出布尔类型值的时候echo true
; 它在页面中会输出1。echo false
; 它会在页面中什么都不输出。建议使用var_dump() 来输出更明了的结果。
逻辑运算符
逻辑运算符 | 例子 | 解释 | 运算符法则 |
---|---|---|---|
and && | $a and $b $a && $b | 逻辑"与"运算 | |
or || | $a or $b $a || $b | 逻辑"或"运算 | |
xor | $a xor $b | 逻辑"异或"运算 | 相同为假,不同为真。 |
! | !$a | 逻辑"非"运算 |
<?php
$a = true;
$b = false;
//var_dump($a);
//var_dump($b);
$c = ($a and $b);
$c = ($a && $b);
$c = ($a or $b);
$c = ($a || $b);
$c = ($a xor $b);
$c = !$a;
var_dump($c);
?>
其他运算符
三元运算符 ?:
$a = 10;
$b = 20;
$max = $a > $b ? $a : $b;
echo $max;
反引号
自动适配系统命令,调用系统命令。
// ``.php
$cmd = "whoami";
$cmd = "ipconfig";
$cmd = "net user";
echo "<pre>".`$cmd`;
@
屏蔽表达式可能发生的错误。
echo @$username;
流程控制
分支执行可以根据表达式的值是否为True 来选择执行某些代码,PHP 的分支执行主要通过if 和switch 来实现。
if 语句
语言结构
if(){//判断条件,如果判断条件的返回值为True,则执行语句块1,否则执行语句块2
//语句块1
}else{
//语句块2
}
单向条件:
$score = 59.9;
if($score >= 60 ){
echo "congratulations";
}
双向条件:
$score = 99.9;
if($score >= 60 ){
echo "congratulations";
}else{
echo "Sorry, you may need help!";
}
多向条件:
<?php
If(判断语句1){
执行语句体1
}elseif(判断语句2){
执行语句体2
} elseif(判断语句n){
执行语句体n
}else{
最后的else语句可选
}
switch 语句
功能与if 语句类似,当需要多向分支结构时,并且判断条件是具体的某个值,此时大多使用switch 结构。
$day = 8;
switch($day){
case 1:
echo "Monday";
break;
case 2 :
echo "Tuesday";
break;
case 3 :
echo "Wednesday";
break;
case 4 :
echo "Thursday";
break;
case 5:
echo "Friday";
break;
case 6:
case 7:
echo "Weekend!";
break;
default:
echo "Error!";
}
注意:
- 表达式的值最好是整形或者字符串。
- 不要忘记break 语句,用来跳出switch 语句。每个case 语句后面都加上break。
- 如果某个case 语句后面并没有接语句块,那么就说明这个语句块的内容是同下。
- case 后面的语句块是不需要
{}
括起来的。
循环语句
计算机最擅长的功能之一就是按照规定的条件,重复执行某些操作,这是程序设计中最能发挥计算机特长的程序结构。
while
while(表达式){//当表达式的值为真的时候,执行循环体。
//循环体
}
当表达式的值为true,就执行下面的循环体。当循环体执行结束之后,继续判断表达式的值是true 还是false,如果还是true,那么就继续执行循环体。直到,这个表达式的值为false,那么这个while 语句就执行结束了。
例子:输出1 到100 数字。
$a = 1;
while ($a <= 100) {
echo $a."<br />";
$a ++;
}
do while
$a = 1;
do{
echo $a."<br />";
$a ++;
}while ($a <= 10);
do…while不论while判断是否成立,先执行一次代码框循环语句,保证会执行一次(表达式的真值在每次循环结束后检查)
然而我们之前的while循环会检查布尔判断区域,成立则执行,不成立则不执行.
for
for(;;){//计数器;判断条件;自增或自减
//循环体
}
例子:输出1 到1000 数字。
// for.php
for ($i=0; $i < 1000 ; $i++) {
echo $i."<br />";
}
特殊流程
break
break 用于switch,for,while,do…while,foreach 等的中断。后面可以接上一个数字来表示跳出几层循环。默认不加就是跳出当前循环语句。
// break.php
for ($i=1; $i <= 100; $i++) {
if ($i % 17 == 0) {
break;
}
echo $i."<br />";
}
echo "PHP is DONE!";
continue
continue 只能用在循环语句,轮空本次循环,并不是结束整个循环语句。
// continue.php
for ($i=1; $i <= 100; $i++) {
if ($i % 17 == 0) {
continue;
}
echo $i."<br />";
}
echo "PHP is DONE!";
exit
exit 表示结束当前整个PHP 脚本的执行。同die() 语句。
// exit.php
for ($i=1; $i <= 100; $i++) {
if ($i % 17 == 0) {
// exit;
// exit("PHP is OVER");
// die("PHP is OVER");
die();
}
echo $i."<br />";
}
echo "PHP is DONE!";