PHP笔记

引言

本文系作者学习PHP时的部分笔记,内容主要来源于《PHP+MySQL网站开发从零开始学》一书。此书介绍PHP7与MySQL5.6的相关内容,其中PHP部分含金量较高,MySQL则主要介绍DDL(数据定义语音),笔者认为难度略大,最好先从DML开始学习。以下是PHP基本语法、PHP与用户交互、正则表达式的笔记,语言尽量简洁,方便将来查阅。

PHP基本语法

引用

与c++相同

PHP变量的类型由上下文决定

可变变量:

一个变量的变量名可以动态设置和使用

例:

<?php
$a = "hello";
$$a = "world";
echo $a; //输出hello
echo $$a; //输出world
echo $hello; //输出world
?>

常量声明

A.define(‘常量名’,常量值)

B.const 常量名=常量值

defined(常量名)

检测常量是否存在,若存在则返回true

内置常量

__FILE__程序文件名(包括目录)

__DIR__程序目录

__LINE__当前PHP程序的行数

TRUE,FALSE布尔值

PHP-VERSION php版本号

PHP-OS 操作系统名称

Echo false不输出内容

进制

八进制:数字前加0

十六进制:数字前加0x

十进制: 直接写数字

Gettype(变量名)

获取变量类型

Intval(变量名或算式)

强制类型转换为int型

相当于(int)变量名或算式

字符串

双引号定义的字符串中的变量会被解析

双引号中的特殊字符会被转义解析,如 \n \r \e \t……

\x[0-9A-Fa-f]{1,2} 以十六进制方式表达的字符

\[0-7]{1,3} 以八进制方式表达的字符

heredoc和nowdoc

Heredoc:对变量解析,对特殊字符转义

<<<EOT

大段字符

EOT;

Nowdoc:不对变量解析,不对特殊字符转义

<<<’EOT’

大段字符

EOT;

注:EOT为标识符,符合变量命名规则

一个数值可以通过strval(数值)转换为字符串

与(string)数字 效果相同

资源

资源保存了对外部资源的引用,通过专门函数来建立和使用

例:$handle = fopen(“C:\\folder……”,”r”)

NULL

A.被赋值为null

B.未被赋值

C.被unset()

类型转换

A.自动转换

(类型)值

例:(int) 1.1

B.强制转换

例:settype(变量名,’int’)

算数运算符

与C++基本相同

.= 将左边的字符串连接右边字符串,然后赋给左边字符串

<>或!=不等号

==类型转换后相等

===类型和值都相等

!=类型转换后不等

!==数值或类型不等

注意:慎用==和!=,因为会自动转换,引发意想不到的麻烦

逻辑运算符

||比OR优先级高

&&比AND优先级高

XOR逻辑异或

错误控制运算符@

@加在表达式前,屏蔽错误信息

NULL合并运算符??

变量存在且值不为NULL则返回值,否则返回第二个操作符

相当于: isset(变量) ?第一个操作符: 第二个操作符

太空船操作符<=>

$a < $b 返回-1

$a = $b 返回0

$a > $b 返回1

函数

Function 函数名(传入参数){

……

Return 返回值;

}

其余与C++相同

PHP不支持函数重载

通过引用&传递参数

与C++相同

函数参数默认值

与C++相同,有默认值的参数必须放在最后

函数参数可以指定类型

Class 、interface 对象或接口

Array 数组

Callable 回调函数

Bool 、int、string、float标量类型

调用函数时参数不会强制类型转换,不符合则返回异常

用…设置传入任意多个参数

例:

Function myfunction(…$vars){
}
myfunction( …[I,2,3]);
myfunction(1,'test',1.0,false);
myfunction(…array(1,2,3));

也可以指定可变数量参数的类型,或用引用&传递参数

例:

Function myfunction(int …$vars){
}
myfunction(1,2,3,4);
Function myfunction(int …$vars){
}

静态变量

Static变量的值可以一直保持

通过数组可以返回多个值

通常借助list函数

例:

Function myfunction(){
….
Return [$a,$b];
}
List($a,$b)=myfunction();

返回值类型声明

例:

Function myfunction(): int {
…
}

可变函数

将函数名赋值给变量

使用时在变量名后加(参数)

例:

$a = myfunction(){}

$a();

典型用法:将函数名放入数组中,用foreach依次执行

匿名函数(闭包函数)

临时创建一个没有名称的函数

例:

$myfunction = function($message){
echo "myfunction:".$message;
}
$myfunction('hello') //输出myfunction:hello

PHP与用户交互

表单处理

get:将数据直接添加到表单的action URL之后,两者之间用?分隔,参数间用&分隔

例:html表单

<form>
请输入手机号:
<input type="text" name="cellphone" />
<input type="submit" name="提交" />
</form>
<form name="form1" action="form1.php" method="get">

返回 action=’http://my.server.com/test.php?cellphone=13912341234&name=test'

post:浏览器与action中的URL连接,用HTTP协议传输给PHP程序

对比:

安全性上post好于get

执行效率上get高于post

post传输数据量大,默认不受限制。

参数被解析为数组形式,存放在全局变量$_GET,$_POST,$_REQUEST中

表单元素及处理

文本框:

附:常见密码框也是文本框,其input的值设为password

例如:

文本区域textarea可看作多行文本框,与文本框功能相同

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<textarea name='description'> </textarea>

<form>
<!--这是HTML的注释语法-->
<p> First name:<input type="text" name="fname" /></p>
<p> Last name:<input type="text" name="lname" /></p>
<p><input type='submit' /></p>
<!--添加一个提交按钮-->
</form>
<?php
//用isset判断$_GET是否有fname
if(isset($_GET['fname'])){
//打印出表单提交的fname
echo "First name : ${_GET['fname']} <br/>\n;
}
if(isset($_GET['lname'])){
echo "First name : ${_GET['lname']} <br/>\n;
}

单选按钮(radio):

1
2
3
4
5
6
7
8
9
10
<form>
<input type="radio" name="radiobutton" value="同意" />同意<br/>
<input type="radio" name="radiobutton" value="不同意" />不同意<br/>
<input type="radio" name="radiobutton" value="无法判断" />无法判断<br/>
<input type='submit'>
</form>
<?php
if(isset($_GET['radiobutton'])){
echo "你的选择是 ${_GET[radiobutton]} <br/>\n;
?>

radiobutton是单项选择所以只能有一个结果

复选框(CheckBox):

1
2
3
4
5
6
7
8
9
10
11
12
13
<form>
<h3>你喜欢的交通方式:</h3>
<input type="checkbox" name="checkbox[]" value="plane" />飞机 <br/>
<input type="checkbox" name="checkbox[]" value="train" />火车 <br/>
<input type="checkbox" name="checkbox[]" value="bus" />汽车 <br/>
<input type="checkbox" name="checkbox[]" value="ship" />船 <br/>
<input tpye="submit">
</form>
<?php
if(isset($_GET['checkbox'])){
var dump($_GET['checkbox']);
}
?>

PHP解析器会自动将checkbox[]参数解析为数组,否则会出现参数值覆盖问题

下拉列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form>
<h3>酒店级别</h3>
<select name="hotelclass" >
<option selected >不限</option>
<option>五星级 </option>
<option>四星级 </option>
<option>三星级 </option>
<option>二星以下 </option>
</select>
<input type= 'submit'>
</form>
<?php
if(isset($_GET['hotelclass'])){
echo ("你的选择是:");
var dump($_GET['hotelclass']);
}
?>

如果需要多选,只要将name属性后面加上[]即可

按钮:

重置按钮:

由浏览器直接处理,不会提交数据到服务器

提交按钮:

1
<input type ="submit" value="提交" />

PHP解析器将表单分别放到全局变量$_GET,$_POST,$_REQUEST中,方便进一步处理

cookie存放在客户端可由用户修改,session由服务器的PHP控制

创建cookie:

语法:setcookie(name,value,expire,path,domain,secure);

//setcookie(cookie名字,值,失效时间,服务器上的有效路径,域名,是否使用HTTPS协议传输)

例:

1
2
3
4
5
6
7
8
<?php
setcookie("user","Chole",time()+7200,'''',"yourdomain.com",1);//将使用HTTPS传输,0表示普通传输
?>
<html>
<body>

</body>
</html>

注意:setcookie()必须在标签前,否则会出错!

读取cookie:

用$_COOKIE变量取回cookie值

1
2
3
4
<?php
echo $_COOKIE["user"]; //只输出一个cookie值
print_r($_COOKIE);//输出cookie的所有值
?>

确认cookie存在:

用isset()确认是否已设置Cookie

1
2
3
4
<?php
if(isset($_COOKIE["user"])){
echo $_COOKIE["user"]."你好!<br/>";
?>

删除cookie:

设置cookie有效时间为过期即可

1
2
3
4
<?php
//将过期时间设为半小时前
setcookie("user", "", time()-1800);
?>

Session

创建session:

使用session_start()函数

例:

1
2
3
4
5
6
<?php session_start(); ?>
<html>
<body>

</body>
<html>

注意:session_start()必须在之前,因为会设置一个Cookie

存储Session:

全局变量$_SESSION,在一个页面赋值,在另一个页面调用就可以实现变量在页面之间的传递

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//每刷新一次浏览次数加一
<?php session_start();
if(isset($_SESSION['views'])){ //判断session是否存在
$_SESSION['views']++;
}
else{
$_SESSION['views']=1;
}
?>
<html>
<body>
<?php
echo "浏览次数=" .$_SESSION['views'];
?>
</body>
<html>

终结session:

unset()函数释放指定的session变量

1
2
3
<?php
unset($_SESSION['views']);
?>

session_destroy彻底终结session,所有已存储的session数据都会被重置

1
2
3
<?php
session_destroy();
?>

正则表达式

函数:

int preg_match(string $pattern,string $subject)搜索与pattern匹配的一个字符串,搜索到返回1,否则返回0

string preg_replace(mixed $pattern,mixed $replacement,mixed $subject)搜索跟正则表达式pattern匹配的一个字符串,并用新的字符串替代所有这个表达式出现的地方

array preg_split(string $pattern ,string $subject)搜索匹配的字符串,以字符串集合方式返回匹配结果

实例:

电子邮件地址检查:

1
2
3
4
5
6
7
8
9
10
11
    preg_match("/^([0-9a-zA-Z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2}?)$/i",$email);

匹配所有正整数:^\[0-9\]{1,}$;

匹配所有整数:^\\-{0,1}\[0-9\]{1,}$;

匹配所有小数:^\\-{0,1}\[0-9\]\\.{0,1}\[0-9\]{0,}$;

url合法性:^(http:\\/\\/)?\[a-zA-Z0-9\]+(\\.\[a-zA-Z0-9\]+)*.

电话号码合法性:+86 010xxxxxxxx ^(\\+86\[\[:space:\]\]010\[0-9\]{8}$

符号

元字符:

^:匹配指定字符串的开头

$:匹配指定字符串的结尾

.:匹配除\n以外的任何单一字符

[]:只匹配方括号内的单一字符,可用-连接匹配范围的首尾

|:或操作符,在两项或多项之间选择一个匹配,如“b(a|e|oo)s”可以匹配boos(因为oo是两个字符,所以这里不用方括号,用圆括号)

\:用来转义一个字符,对元字符、制表符、空格等使用,如\$,\\

():标记一个子表达式的开始和结束

*:匹配前面的子表达式零次或多次

+:匹配前面的子表达式一次或多次

?:匹配前面的子表达式零次或一次

注意:*、+、?只对紧挨它的前面那个字符起作用

转义字符:

\n:匹配一个换行符

\r:匹配一个回车键

\s:匹配任何空白字符,包括空格、制表符、换页符等,等价于[\f\n\r\t\v]

\S:匹配任何非空白字符,等价于[^\f\n\r\t\v]

\t:匹配一个制表符

\v:匹配一个垂直制表符

\f:匹配一个换页符

\cx:匹配由x指明的控制字符。例如:\cM匹配一个Control-M或回车符。x的值必须是A-Z或a-z之一,否则将c视为一个原义‘c’字符,即字符c本身

修正符:

i:忽略大小写

m:除了匹配^和$还分别匹配换行符\n的之后和之前

s:圆点字符(.)匹配所有字符,包括换行符\n

x:除了转义或在字符类中的空白字符全部忽略

e:preg_replace()在替换字符串中对逆向引用做正常替换,将其作为PHP代码求值,并用其结果替换被搜索的字符串

A:强制仅从字符串开头开始匹配

D:行结束($)仅匹配目标字符串的结尾。没有此项时,最后一个字符串是换行符也会被匹配

S:当一个模式将被匹配多次时,为加速匹配而先对其进行分析

U:使?的默认匹配成为贪婪状态的

X:任何\后面没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充

u:模式字符串被当成utf-8

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 引言
  2. 2. PHP基本语法
    1. 2.1. 引用
    2. 2.2. PHP变量的类型由上下文决定
    3. 2.3. 可变变量:
    4. 2.4. 常量声明
    5. 2.5. defined(常量名)
    6. 2.6. 内置常量
    7. 2.7. 进制
    8. 2.8. 字符串
    9. 2.9. heredoc和nowdoc
    10. 2.10. 资源
    11. 2.11. NULL
    12. 2.12. 类型转换
    13. 2.13. 算数运算符
    14. 2.14. 逻辑运算符
    15. 2.15. 太空船操作符<=>
    16. 2.16. 函数
    17. 2.17. 通过引用&传递参数
    18. 2.18. 函数参数默认值
    19. 2.19. 用…设置传入任意多个参数
    20. 2.20. 静态变量
    21. 2.21. 通过数组可以返回多个值
    22. 2.22. 返回值类型声明
    23. 2.23. 可变函数
    24. 2.24. 匿名函数(闭包函数)
  3. 3. PHP与用户交互
    1. 3.1. 表单处理
    2. 3.2. 表单元素及处理
      1. 3.2.0.1. 文本框:
      2. 3.2.0.2. 单选按钮(radio):
      3. 3.2.0.3. 复选框(CheckBox):
      4. 3.2.0.4. 下拉列表:
      5. 3.2.0.5. 按钮:
  4. 3.3. cookie
    1. 3.3.0.1. 创建cookie:
    2. 3.3.0.2. 读取cookie:
    3. 3.3.0.3. 确认cookie存在:
    4. 3.3.0.4. 删除cookie:
  • 3.4. Session
    1. 3.4.0.1. 创建session:
    2. 3.4.0.2. 存储Session:
  • 4. 正则表达式
    1. 4.1. 函数:
    2. 4.2. 实例:
    3. 4.3. 符号
      1. 4.3.0.1. 元字符:
      2. 4.3.0.2. 转义字符:
      3. 4.3.0.3. 修正符:
  • ,