php基础语法
-
定界符<?php和?>
在PHP里面,把PHP代码包含在定界符里面,
当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php和?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。
定界符的作用:告诉PHP引擎定界符里面的是PHP代码。凡是在一对开始和结束定界符之外的内容会被PHP解析器忽略。大多数情况下PHP都是嵌入在HTML文档中的。
例如:
效果:不会被PHP引擎解析,直接原样输入
- PHP代码的位置
可以在一个html文档里面的任意位置嵌入PHP代码,只需要写上定界符,开启PHP模式即可。
如下:我们在一个php文档中的html代码中任意位置嵌入PHP代码
-
效果:
这里有一个很重要的细节,客户端无法观察到具体的PHP代码,因为PHP引擎已经将PHP代码转换为了html,所以客户端看到的只是简单的html代码。
1.您无法在浏览器中通过查看源文档的方式来查看 PHP 的源代码 - 您
只能看到 PHP 文件的输出,即纯粹的 HTML。这是因为在结果返回浏览器之前,
脚本就已经在服务器执行了。
如下:
3.PHP定界符风格
在PHP中一共有4种风格,分别是标准类型,短标记,ASP式标记和Script式标记
①标准类型:<?php和?>
这是官方推荐的风格,如果没有特殊要求,就使用这个风格
②短标记:<?和?>
偶尔会被禁止,因为可能和其他文件产生冲突
如果要打开,需要在php.ini里面的short_open_tag里面打开注释
③ASP式标记:<%和%>
这是为了迎合ASP或者ASP.Net的开发人员的编程习惯,如果要使用,也需要在php.ini中打开注释
如下:
④Script式标记:<script language="php"></script>
这种风格默认可用,但是不常用
总结:虽然介绍了这么多,但是没什么事儿的话就用标准
4.PHP里面的注释
在PHP里面支持3种风格的注释,C,C++和UNIX shell
shell风格是以一个#
C++风格:是以//来进行注释
C风格:是以/*和*/来进行注释
指令分隔符
同 C 或 Perl 一样,PHP 需要在每个语句后用分号结束指令。一段 PHP 代码中的结束标记隐含表示了一个分号;在一个 PHP 代码段中的最后一行可以不用分号结束。如果后面还有新行,则代码段的结束标记包含了行结束。
<?php echo "This is a test" ; ?> <?php echo "This is a test" ?> <?php echo 'We omitted the last closing tag' ;
Note:
文件末尾的 PHP 代码段结束标记可以不要,有些情况下当使用 include或者require时省略掉会更好些,这样不期望的空白符就不会出现在文件末尾,之后仍然可以输出响应标头。在使用输出缓冲时也很便利,就不会看到由包含文件生成的不期望的空白符。
- 变量
①声明变量
我们的PHP是解释性语言,由于是弱类型语言,所以变量的类型不用提前定死,和Javascript是一样的,你赋予什么值,它就是什么类型
在PHP里面,声明一个变量,使用$符号来声明一个变量,如下:
如果是全局变量,则在多个PHP代码段都可以使用
如下:
这里介绍3个函数
unset():将一个变量置空
isset():检测一个变量是否被设置
empty():检测一个变量是否为空
isset()和empty()的区别:
isset():如果设置了,返回true,否则返回false
empty():如果是空,则为true,否则的话为false
什么时候被当作empty:
若变量存在且其值为""、0、"0"、NULL、FALSE、array()、var $var、 以及没有任何属性的对象,则返回 TURE
②变量的命名
规则如下:
1. 以$开头
2. 后面由数字,字母,下划线组成,但是不能以数字开头
3. 不能是关键字
4. 驼峰命名法,望文知意(软性要求)
PHP里面由于支持utf8编码格式,所以变量名都可以用中文,但是,禁止使用!!!!
变量名区分大小写,但是在PHP里面函数名,用户定义的类和内置的关键字等是不区分大小写。
Note: $this是一个特殊的变量,它不能被赋值。
③ 可变变量
所谓可变变量,就是变量名的值可以动态的设置为另一个的变量的变量值
将一个变量的值作为变量名,并赋新值
④ 引用赋值
所谓引用赋值,就是将一个变量的地址赋值给另外一个变量,但是和C语言不同的是,当我们输出被引用赋值的变量的时候,不会打印出里面存储的地址,而会输出通过地址找到的变量值。
在C语言中会输出&$i;
⑤ PHP里面变量类型介绍
PHP里面支持8种原始数据类型(4种标准类型,2种复合类型,2种特殊类型)
首先介绍一个函数:
var_dump():作用就是查看某一个变量是什么数据类型
效果:打印输出各个变量的值和数据类型,如果是字符串或数组还会分别计算size值和length值,
(1)Boolean类型
和其他语言一样,就两个值,一个是TRUE,一个是FALSE
除了FALSE以外,以下变量值也会被当成FALSE
- 布尔值FALSE本身
- 整型值0
- 浮点型0.0 以及空字符串””以及字符串”0”
- 不包含任何元素的数组
- 不包含任何成员变量的对象
- 特殊类型NULL
(2) int 整型
和JavaScript里面一样,可以使用十进制,八进制,十六进制,甚至还支持二进制
无论是几进制,最终输出都以十进制输出
在PHP里面,不支持无符号整数,支持有符号整数
我们可以通过is_int()函数来检测一个变量是否为整型,返回值为true或者false,如下:
效果:因为是一个整型变量,所以输出了”这是一个整数”
还有一个知识点,就是关于整型数据类型的取值范围
一般来讲,整型数据类型的取值范围为-231~231-1(2147483647)
当一个变量的值超出int的取值范围的话,自动被转为float类型
(3) 浮点型
PHP里面浮点数有两种表示方式方法,
第一种就是普通小数表示方式,
还有一种就是科学计数法
PHP里面浮点数精确到14位,这个精度的计算是从最左边开始,第一个非0的数就是精度的开始,精度开始后的第15位数按照四舍五入的原则向前进1
浮点数只是一个数的近似表示,并不能存储准确的值
例如:由于浮点数不能精确存储,所以会出现类似于以下的情况
(不要向下面的例子一样命名变量!!!)
和整型一样,也存在is_float()函数来判断一个变量是否是一个浮点数。
(4) 字符串
C语言没有String类型,声明字符串需要声明一个字符串数组
字符串的表示方法:三种‘’、“”、<<<自定义变量 内容 自定义变量;
字符串就是任意长度的字符序列。在PHP里面字符串可以用单引号或者双引号来分隔。在PHP中,单引号和双引号的字符串是有区别的:
如下:单引号里面的变量不会被解析,但是双引号里面的变量会被解析。
如果只是一个普通的字符串,那么建议使用单引号,因为这样的效率比双引号更高。如下:
如果是放在双引号里面需要解析的变量,我们一般会加上一对{}来突显出这是一个变量
双引号里面支持多种字符转义
例如:当我们想要使用普通的双引号的时候,用一个\进行转义即可
转义字符代码 |
转义字符的含义 |
\” |
双引号 |
\’ |
单引号 |
\\ |
反斜杠 |
\n |
换行符 |
\r |
回车符 |
\t |
制表符 |
\$ |
美元符号 |
接下来就是单引号支持的转义字符,大多数都是不支持的,但是也不是说完全不支持,只支持两个:单引号和反斜杠
和前面同样,有一个is_string()函数可以判断一个变量是否为字符串,如果是返回TRUE,否则返回FALSE。
定义字符串还有一种方法,通过定界符语法<<<标识符
语法: 变量名 = <<<标识符
字符串内容
标识符;
如下:
这种方法一般用于大量的字符串的时候
(5) 数组
数组就是拿来存储多个数据的,在PHP里面,数组可以放入任意类型数据,
通过var_dump(),我们同样可以查看数组的类型,如下:
(6) 对象
后面学习面向对象知识的时候会具体介绍
->表示指向
(7) 资源类型
资源类型其实是保存了外部资源的一个引用。
(8)Null类型
该类型只有一个值,表示一个变量没有值
有3种方法让一个变量成为null
- 直接给变量赋值为null
- Unset()函数销毁一个变量
- 声明一个变量,但是不赋值
(9) 伪类型
Mixed,number,callback
这3个不是PHP里面的标准数据类型,这3个代表的意思依次如下:
Mixed:代表一个参数可以接受多种不同类型
Number:说明一个参数可以是int也可以是float
Callback:说明参数可以是一个用户自定义的函数
- 数据类型之间的相互转换
① 自动类型转换
自动转换通常在不同的数据类型之间进行混合运算的时候,会先将其转换为同一类型,然后进行运算。
自动类型转换:转换为布尔型,转换为整形,转换为浮点型,转换为字符串型
转换为布尔型:
除了FALSE以外,以下变量值也会被当成FALSE
- 布尔值FALSE本身
- 整型值0
- 浮点型0.0 以及空字符串””以及字符串”0”
- 不包含任何元素的数组
- 不包含任何成员变量的对象
- 特殊类型NULL
转换为整型:
布尔型转整型:TRUE转换为1,FALSE转换为0
浮点型转换为整型:向下取整(直接舍去小数部分)
字符串型转整型:取决于开始的部分,如果字符串以合法的数值开头,则使用该数值,否则转换为0
转换为字符串型:
布尔型转字符串型:布尔值TRUE会转换为”1”,FALSE会转换为””
整型或者浮点型转换为字符串型:就是将数字的字面值转换为string类型
例如:
3 “3”
3.14 “3.14”
② 强制类型转换
就和以前在C语言里面是一样,将要转换的数据类型写在一个小括号里面
如下:
这里顺便介绍两个函数
Strval():获取变量的字符串值,stravl(string value 的简写)
settype():作用就是设置变量的数据类型
接收两个参数 settype(变量,“数据类型”);
类型转换的一些细节:(总结)
- 整数转为浮点型的时候,由于浮点型的精度要比整型大,所以转换后的精度不变
- 浮点型转换为整型的时候,小数部分自动舍去
- 如果一个浮点数转换为整型,取值范围超过了整型,那么结果将会是不确定的。
- 字符串转换为数字的时候,取字符串开始部分的数值,开始部分的数值也包括科学计数法。如果没有数值就为0;
- Null转换为字符串的话,将会转换为空字符串””
7.常量
常量一般就是一些固定的值,
例如数学里面的PI,3.1415926… 对于这种固定的值,我们就可以将其定义为常量
常量的作用域是全局的,可以在脚本的任何位置访问和使用
① 常量的定义
在PHP里面,通过define()函数来定义一个常量
语法:
Define(“常量名”,常量值,[true/false]);
如下:
如果第3个参数设置为true,则代表不区分大小写
默认是FALSE
②使用const关键字赋值
语法 const PI=3.14; echo PI;//3.14
关于常量一些其他知识总结:
- 常量前面没有$符号
- 常量可用define()函数来定义,还能通过赋值语句 const关键字进行赋值
- 常量可以不用理会变量的作用域,可以在脚本的任意位置访问到
- 常量值得类型只能是标准数据类型(boolean,int,float,string)
8.系统中预定义的常量
PHP里面提供了一套系统定义好了的常量
如下表:
常量名 |
常量值 |
说明 |
PHP_OS |
一般值为unix或者winnt |
执行php解析的操作系统的名称 |
PHP_VERSION |
5.4.16 |
当前PHP服务器的版本 |
TRUE |
代表布尔值真 |
|
FALSE |
代表布尔值假 |
|
NULL |
代表空值 |
|
M_PI |
3.1415926535898 |
圆周率 |
E_ERROR |
1 |
错误,导致PHP脚本运行终止 |
E_WARNING |
2 |
警告 |
E_PARSE |
4 |
解析错误 |
E_NOTICE |
8 |
提示,非关键错误,例如申明了一个变量但是没有赋值 |
如下:
9.PHP中的魔术常量
所谓魔术常量,就是指常量的值不是固定的,会根据不同的环境而发生改变
魔术常量名以两个下划线开始,两个下划线结束
常量名 |
常量值 |
__FILE__ |
当前文件名 |
__LINE__ |
当前行数 |
__FUNCTION__ |
当前函数 |
__CLASS__ |
当前类名 |
__METHOD__ |
当前对象方法 |
效果:
10.PHP里面的运算符
① 算数运算符
加法,减法,乘法,除法,求模,算数符号,算数断言
注意一下除法,例如5 / 2将会得到2.5
算数断言:就是在操作数的前面加一个+号
一元运算符的自增和自减
++ --
分为两种:a++,++a
PHP里面的自增有独特的地方,在PHP里面,不仅可以对数字进行自增,还可以对字符串进行自增(注意只有递增,没有递减)
如果是字母,可以像算数运算一样往前进位
自动递增 |
得到结果 |
“a” |
“b” |
“z” |
“aa” |
“spaz” |
“spba” |
“a9” |
“b0” |
② 字符串运算符
只有一个知识点,就是字符串的拼接,在PHP里面,通过一个”.”来进行字符串的拼接
字符串类型非常霸道,和任何标量数据相连接的话,合并成新的字符串类型
③ 赋值运算符
基本操作符就是一个 =
除此之外,还有其他的一套:
符号 |
+= |
-= |
/= |
*= |
%= |
^= |
&= |
|= |
.= |
④ 比较运算符
相等,全等,不等,不全等,大于,小于,大于等于,小于等于
⑤ 逻辑运算符
逻辑运算符有4个:逻辑与,逻辑或,逻辑非,逻辑异或
逻辑异或:^
作用:两个变量不相同返回真,相同返回假
在php里面,&&,||可以使用and和or来表示,但是实际开发中一般还是符号用得多一些
逻辑运算符同样存在短路现象
判断正确就不会进行下一个条件判断
对于&&,如果第一个操作数为FALSE,那么不会去计算第二个操作数的结果,直接返回FALSE
对于||,如果第一个操作数是true,那么不会去计算第二个操作数,直接返回true。
⑥ 位运算符(用得不多)
位运算符主要作用于二进制的操作数上面,所以当使用位运算符的时候,所有操作数首先需要转换为二进制数
按位非,左移,右移,按位与,按位异或,按位或
按位非:~ 取反
$A ~ $A
0 1
1 0
按位与:& 两者都为1的时候为1,否则为0
$A $B $A & $B
0 0 0
0 1 0
1 0 0
1 1 1
按位或:| 只要有一位为1,则为1,否则为0
$A $B $A | $B
0 0 0
1 0 1
0 1 1
1 1 1
按位异或:^ 二者不同为1,相同为0
$A $B $A ^ $B
1 0 1
0 1 1
1 1 0
0 0 0
练习:
$a & $b
$a 0000 1100
$b 0000 0011
0000 0000 = 0
$a ^ $b
$a 0000 1100
$b 0000 0011
0000 1111 = 15
$a | $b
$a 0000 1100
$b 0000 0011
0000 1111 = 15
$a << $b
$a 0000 1100
0110 0000 = 96
这个位运算有什么作用:在进行固定的运算的时候,效率相当之高,左移一位就相当于是乘以2,右移一位相当于除以2
⑦ 其他运算符
- 错误屏蔽运算符:@
有些时候当我们书写php代码的时候,可能会出现一些警告,这个错误屏蔽运算符@就是用来屏蔽这些警告
- 三元运算符
又被称作三目运算符 ?:
例如 A?B:C
A>b?max(a):min(b);
- Instanceof:测试一个对象是否是一个类的实例化
- 对象成员访问符:->
⑧ 运算符的优先级
PHP运算符的优先级具体如下表:
除了上面的优先级以外,我们可以通过一对小括号来改变优先级
11.表达式
所谓表达式,就是任何一个可以得到值的式子,就可以被称之为表达式。