参考书籍《细说PHP》
第一个php脚本程序
将.php文件放在web服务器根目录下,访问web服务器URL/xxx.php
,本地访问http://localhost/xxx.php
.
调用函数phpinfo()可以看到系统相关信息、预定义变量,以及已经加载的php模块和配置信息
php语言标记
将php代码嵌入html中的位置
可以将php代码段嵌入到html的任意地方
当php遇到结束符 “?>” 时,简单地将后面的内容原样输出,只到遇到下一个开始标记位置
在一个文件中的不同位置使用多个php标记时,这些标记之间的语法是一个整体
对于输出打断文本而言,脱离php的解析模式,比php的echo和print效率更高
解读开始和结束标记
⭐<?php ?>⭐
和<? ?>
当在html页面中嵌入纯变量时,也可以使用<?=$variablename ?>
<script language=”php”></script> (PHP7以前版本支持)
<% %> (PHP7以前版本支持)
除非有特殊需求,否则使用<?php ?>
,对于只包含php代码的文件,结束标识符最好不要存在,防止末尾被意外地注入空白符号
指令分隔符“分号”
使用;
程序最后一行,即?>
前,可以不用分号
程序注释
多行:/* */
单行://和#
多行注释无法嵌套多行注释,其它可以嵌套
单行注释只对php内容有效,//?>
之后的html代码将被显示出来
在程序中使用空白处理
空格、Tab、换行被php引擎忽略
代码规范:
- 使用两个空行
- 一个源文件的两个代码片段之间
- 两个类的声明之间
- 使用一个空行
- 两个函数声明之间
- 函数内的局部变量和函数的第一条语句之间
- 块注释或单行注释之前
- 使用空格增加代码缩进提高可读性
- 关键字与括号之间,注意函数名和左括号之间不能有空格
- 函数参数列表的逗号后
- 算式的操作符和运算符之间,二进制运算和一元运算除外
- for语句中的逗号后
- 强制类型转换语句中的强制类型的右括号与表达式之间应该用逗号隔开,并添加空格
变量
建议所有用到数据的地方,先将数据赋值给一个变量
变量的声明
|
变量的作用域:
- 大部分不是在函数中声明的变量,可以在一个页面的所有php模式下使用,包含include和require引入的文件
- 如果使用了Cookie和Session,可以在多个页面中使用
|
如果empty()的参数是非零或者非空的值,则返回false
“”、0、“0”、NULL、FALSE、array()、$var及任何没有属性的对象都被认为是空的
如果参数为空,则返回true
如果函数isset()的参数存在,则返回TRUE,否则返回FALSE
若参数是一个被设置成NULL的变量或已使用unset()释放,将返回FALSE
NULL字节(”\0”)不等同于PHP的NULL常数,
推荐使用!empty($var)的方式判断一个变量存在且不为空
变量的命名
变量名严格区别大小写
内置结构和关键字及用户自定义的类名不区分大小写,如echo、while、class名称、function名称
字母或下划线开头
PHP常用关键字 | |||||
---|---|---|---|---|---|
and | or | xor | if | else | for |
foreach | while | do | switch | case | break |
continue | default | as | elseif | declare | endif |
endfor | endforeach | endwhile | endswitch | enddeclare | array |
static | const | class | extends | new | exception |
global | function | exit | die | echo | |
eval | isset | unset | return | defien | defined |
include | include_once | require | require_once | cfunction | use |
var | Public | private | protected | implements | interface |
extends | abstract | clone | try | catch | throw |
可变变量
|
运行结果
变量的引用赋值
$a=&$b | php | C++ |
---|---|---|
b是a的别名 | √ | √ |
其中一个的值改变会导致另外一个改变 | √ | √ |
将$b的引用赋值给$a | 地址指针 | |
释放其中一个 | 解除a、b的值关联关系,只释放一个 | 两个都释放 |
变量的类型
|
布尔型
被认为是FALSE的值
- FALSE
- 0、0.0
- “\0”、”0”
- 没有成员变量的数组
- 没有单元的对象(仅限php4)
- 特殊类型NULL、尚未设定的变量
|
整型
|
|
php没有无符号整数,超出范围后会被解释为float(这点和其它编译器有出入)
eg.
|
浮点型
|
字符串
php字符串没有长度限制
单引号
|
this is a simple string
|
this is a ‘simple’ string
|
this \n is \r a \t simple string\
|
this is a simple $str string
双引号
- 可以使用更多特殊字符的转义序列
- 可以解析变量、数值组、或者对象属性的方法
- 用花括号括起表达式
转义字符 | 含义 |
---|---|
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符 |
\\ | 反斜线 |
\$ | 美元符号 |
\“ | 双引号 |
\[0-7]{1,3} | 正则,匹配一个用八进制符号表示的字符 |
\x[0-9A-Fa-f]{1,2} | 正则,匹配一个用十六进制符号表示的字符 |
\u{xxxxx} | 声明unicode字符(php7引入) |
|
heineken’s taste is great
|
he drank some
|
He drank some heinekens
|
he drank some heinekens
解析unicode,php7开始支持
|
定界符<<<
定界符的命名规则和变量相同
通常用于从文件或者数据库中打断地输出文档
转义和变量解析同双引号
|
//定界符不能用来初始化类成员 |
在开始边界符字符串名称两边加上单引号和双引号(”EOT”),作用类似于单引号\双引号字符串
不加双引号时,作用同双引号
echo <<<"EOT" |
数组
PHP的数组实际上是一张有序图
|
print_r()输出:
Array
(
[foo] => bar
[12] => 1
)
对象
|
资源
资源类型的变量保存了到外部资源的一个引用
资源是通过专门的函数来建立和使用的
使用类型变量包含:打开的文件、数据库连接、图形画布区域等的特殊句柄,并由程序员创建使用和释放
在下面的实例中,使用相应的函数创建不同的资源变量,如果创建成功,则返回资源引用赋给变量;如果创建失败,则返回布尔型false
|
NULL
NULL不区分大小写
以下被认为是NULL
- 直接赋值为NULL
- 声明的变量未赋值
- 被unset()函数销毁的变量
伪类型
- mixed:说明一个参数可以接受多种不同的类型
- number:说明一个参数可以是integer或float
- callback
类型转换
自动转换&强制转换
自动类型转换
向长度增加方向进行
bool&null&string -> integer/float
int -> float
string转化字符串的数字部分,”123abc”-> (int)123,“123.45abc” -> (float) 123.45
|
强制类型转换
类似于C++,
(int),(bool),(float),(string),(array),(object),没有改变变量本身的类型
//没有改变变量本身的类型 $str = "123.45abc"; $int = intval($str); $flo = floatval($str); $str = strval(123.45);//“123.45” <!--25-->
PHP7废除16进制字符串,原先“0xA”被识别为10,而新版被识别为0
变量类型的测试函数
- is_bool($var)
- is_int(), is_integer(), is_long()
- is_float(), is_double(), is_real()
- is_string()
- is_array() 判断是否为数组
- is_object()
- is_resource
- is_null()
- is_scalar()判断是否是标量——整数、浮点数、布尔型、字符串
- is_numeric() 判断是否有任何类型的数字或数字字符串
- is_callable() 判断是否是有效的函数名
常量
只能是标量数据
常量名前不要加$
常量一旦定义后就不能重新定义或者取消定义,直到脚本运行结束自动释放
|
define 和 const 比较
const用于类成员常量和全局常量,但是不能在条件语句中定义常量
//const编译时更快 |
const只能用于普通变量名
|
系统中的预定义常量
常量名 | 常量值 | 说明 |
---|---|---|
PHP_OS | UNIX或WINNT等 | 执行PHP解析的操作系统名称 |
PHP_VERSION | 7.1.9等 | 当前PHP服务器的版本 |
TRUE | TRUE | |
FALSE | FALSE | |
NULL | NULL | |
DIRECTORY_SEPARATOR | \或/ | |
PATH_SEPARATOR | ;或: | 更具操作系统决定环境变量的目录列表分割符 |
E_ERROR | 1 | 错误 |
E_WARNING | 2 | 警告 |
E_PARSE | 3 | 解析错误,由程序解析器报告 |
E_NOTICE | 4 | 非关键的错误,例如变量未初始化 |
M_PI | 3.1415926535898 |
魔术常量
常量名 | 常量值 | 说明 |
---|---|---|
_FILE_ | 当前的文件名 | |
_LINE_ | 当前行数 | |
_FUNCTION_ | 当前函数名 | |
_CLASS_ | 当前类名 | 在哪个类中使用就代表哪个类的类名 |
_METHOD_ | 当前对象的方法名 | 在哪个对象的方法中使用就代表这个方法名 |
|
运算符
+、-、、/、++、–、*
==和C不同的地方==
|
输出:b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba
字符串运算
连接:“.”
赋值运算
$x.=”3”
代表$x=$x.”3”
其余同其他语言
比较运算符
运算符 | 描述 | 说明 | 示例 |
---|---|---|---|
=== | 全等于 | 在==的基础上添加“类型相同” | $a===$b |
!== | 非全等于 | 操作数不相等或类型不同 | |
<> / != | 不等于 | ||
<=> | 太空船运算符/组合比较运算符 | 当左边小于、等于、大于右边时, 分别返回-1,0,1(==可用于字符串比较==) |
$a<=>$b |
?? | NULL合并操作符 | 从左往右第一个存在切不为NULL的操作数 如果都没有定义切不为NULL则返回NULL |
$a ?? $b ?? $c |
|
逻辑运算符
短路
and、&&
or、||
not、!
xor
位运算符
同C++
$a &= $b 等价于 $a = $a & $b
$a >>=$b 等价于 $a = $a>>$b
其他运算符
运算符 | 描述 | 示例 |
---|---|---|
?: | ||
`` | 执行运算符 | |
@ | 错误空值运算符,忽略表达式产生的错误信息 | @表达式 |
=> | 数组加标指定符 | 键=>值 |
-> | 对象成员访问 | |
instanceof | 类型运算符,用来测定一个给定的对象是否来自指定的对象类 | 对象instanceof类名 |
|
运算符优先级
级别(从高到低) | 运算符 |
---|---|
2 | [ |
3 | ++,– |
4 | !,~,-,(int),(float),(string),(array),(object),@ |
5 | *,/,% |
6 | +,- |
7 | <<,>> |
8 | <,<=,>,>= |
9 | ==,!=,===,!==,<>,<=> |
10 | & |
11 | ^ |
12 | | |
13 | && |
14 | || |
15 | ?? |
16 | ?: |
17 | =,+=,-=,*=,/=,.=,%=,&=,|=,^=,<<=,>>= (结合方向:从右到左) |
18 | and |
19 | xor |
20 | or |
21 | , |
容易混淆的特殊值
1代表true
0代表false
表达式 | gettype() | empty() | is_null() | isset() | boolean():if($x) |
---|---|---|---|---|---|
$x=”” | string | 1 | 0 | 1 | 0 |
$x=null | null | 1 | 1 | 0 | 0 |
$x is undefined | null | 1 | 1 | 0 | 0 |
var $x | null | 1 | 1 | 0 | 0 |
$x=array() | array | 1 | 0 | 1 | 0 |
$x=false | boolean | 1 | 0 | 1 | 0 |
$x=true | boolean | 0 | 0 | 1 | 1 |
$x=1 | integer | 0 | 0 | 1 | 1 |
$x=42 | integer | 0 | 0 | 1 | 1 |
$x=0 | integer | 1 | 0 | 1 | 0 |
$x=-1 | integer | 0 | 0 | 1 | 1 |
$x=”1” | string | 0 | 0 | 1 | 1 |
$x=”0” | string | 1 | 0 | 1 | 0 |
$x=”-1” | string | 0 | 0 | 1 | 1 |
$x=”php” | string | 0 | 0 | 1 | 1 |
$x=”true” | string | 0 | 0 | 1 | 1 |
$x=”false” | string | 0 | 0 | 1 | 1 |