php笔记
简介
PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。
PHP 脚本在服务器上执行。
PHP 可免费下载使用。
PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
·PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器
PHP 文件的默认文件扩展名是 ".php"
php安装
推荐使用:wampserver,备选phpstudy
基础
echo与print
echo、print:输出信息(echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。)
echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1
$:创建变量(变量名对大小写敏感、变量名必须以字母或下划线开头、变量名只能包含字母数字以及下划线)
作用域
变量作用域:所有在函数外部定义的变量,拥有全局作用域。在函数内部想要访问外部的变量需要使用global关键字。
static作用域:当一个函数完成时,它的所有变量通常都会被删除。如果需要保留,则需要使用static关键字
EOF
PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字串的方法。
必须后接分号,否则编译通不过。
EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
var_dump()
var_dump() 函数打印变量的数据类型和值。
数据类型
字符串(String)
位于单引号或双引号里面的文本
整型(Integer)
整数是一个没有小数的数字。
整数规则:
整数必须至少有一个数字 (0-9)
整数不能包含逗号或空格
整数是没有小数点的
整数可以是正数或负数
整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
浮点型(Float)
浮点数是带小数部分的数字,或是指数形式。
布尔型(Boolean)
布尔值只有两个值:ture 、false
数组(Array)
数组可以在一个变量中存储多个值。
对象(Object)
先使用class关键字声明类对象再通过new语句实例化
空值(NULL)
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值,NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别,可以通过设置变量值为 NULL 来清空变量数据。
常量
常量是一个简单值的标识符。该值在脚本中不能改变,一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符), 常量在整个脚本中都可以使用。
运算符
算术运算符
x + y
加
x 和 y 的和
2 + 2
4
x - y
减
x 和 y 的差
5 - 2
3
x * y
乘
x 和 y 的积
5 * 2
10
x / y
除
x 和 y 的商
15 / 5
3
x % y
模(除法的余数)
x 除以 y 的余数
5 % 2 10 % 8 10 % 2
1 2 0
- x
取反
x 取反
-2
-2
a . b
并置
连接两个字符串
"Hi" . "Ha"
HiHa
赋值运算符
x = y
x = y
左操作数被设置为右侧表达式的值
x += y
x = x + y
加
x -= y
x = x - y
减
x *= y
x = x * y
乘
x /= y
x = x / y
除
x %= y
x = x % y
模(除法的余数)
a .= b
a = a . b
连接两个字符串
递增递减运算符
++ x
预递增
x 加 1,然后返回 x
x ++
后递增
返回 x,然后 x 加 1
-- x
预递减
x 减 1,然后返回 x
x --
后递减
返回 x,然后 x 减 1
比较运算符
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
x > y
大于
如果 x 大于 y,则返回 true
5>8 返回 false
x < y
小于
如果 x 小于 y,则返回 true
5<8 返回 true
x >= y
大于等于
如果 x 大于或者等于 y,则返回 true
5>=8 返回 false
x <= y
小于等于
如果 x 小于或者等于 y,则返回 true
5<=8 返回 true
逻辑运算符
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
x || y
或
如果 x 和 y 至少有一个为 true,则返回 true
x=6 y=3 (x==5 || y==5) 返回 false
! x
非
如果 x 不为 true,则返回 true
x=6 y=3 !(x==y) 返回 true
数组运算符
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
组合比较符(PHP7+)
PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式如下:
解析如下:
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。
进阶
数组
数组能够在单个变量中存储多个值。
在 PHP 中,有三种类型的数组:
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组
数值数组
使用array()创建数值数据:
关联数组
创建关联数组
获取关联数组里的值
多维数组
一个数组的值是另一个数组,以此类推可以创建二维、三维...的数组。
超全局变量
PHP 超级全局变量列表:
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
$GLOBALS
$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。
$_SERVER['PHP_SELF']
当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。FILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
$_SERVER['GATEWAY_INTERFACE']
服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。
$_SERVER['SERVER_ADDR']
当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME']
当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
$_SERVER['SERVER_SOFTWARE']
服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL']
请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。
$_SERVER['REQUEST_METHOD']
访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。
$_SERVER['REQUEST_TIME']
请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
$_SERVER['QUERY_STRING']
query string(查询字符串),如果有的话,通过它进行页面访问。
$_SERVER['HTTP_ACCEPT']
当前请求头中 Accept: 项的内容,如果存在的话。
$_SERVER['HTTP_ACCEPT_CHARSET']
当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。
$_SERVER['HTTP_HOST']
当前请求头中 Host: 项的内容,如果存在的话。
$_SERVER['HTTP_REFERER']
引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
$_SERVER['HTTPS']
如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
$_SERVER['REMOTE_ADDR']
浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST']
浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
$_SERVER['REMOTE_PORT']
用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME']
当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN']
该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:[email protected])
$_SERVER['SERVER_PORT']
Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
$_SERVER['SERVER_SIGNATURE']
包含了服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED']
当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
$_SERVER['SCRIPT_NAME']
包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
$_SERVER['SCRIPT_URI']
URI 用来指定要访问的页面。例如 "/index.html"。
$_REQUEST
$_REQUEST 用于收集HTML表单提交的数据。
$_POST 与 $_GET
$_POST用于收集通过post方式提交的表单数据,$_GET用于收集url中的数据。
循环
foreach循环
在php中,foreach循环用于遍历数组。
魔术变量
__LINE__:返回文件中当前行号;
__FILE__:返回文件的完整路径和文件名;
__DIR__:返回文件所在目录;
__FUNCTION__、__METHOD__:返回该函数被定义时的名称;
__CLASS__:返回该类被定义时的名字;
__NAMESPACE__:返回当前命名空间的名称。
命名空间
命名空间可以解决以下两类问题:
用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
定义命名空间
通过namespace关键字声明
注意:在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。
子命名空间
命名空间通过分层级的方式定义:
命名空间使用
命名空间的三种访问方式:
非限定名称访问方式;
限定名称访问方式;
完全限定名称访问方式。
命名空间的导入与别名
使用use关键字导入
函数
面向对象编程
构造函数
在一个类中定义一个方法作为构造函数
析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
继承
使用extends关键字来继承一个类
访问权限
PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。默认是公有属性。
public(公有):公有的类成员可以在任何地方被访问。protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。private(私有):私有的类成员则只能被其定义所在的类访问(派生类无法重写私有属性)。
接口
使用interface关键字定义接口,指定某个类必须要实现某些方法,但是不需要定义这些方法的具体内容。
要实现接口,使用implements操作符,类可以实现多个接口,使用逗号分隔开多个接口的名称。
抽象类
使用abstract关键字定义抽象类与抽象方法。
一个类里只要用一个方法被声明为抽象,那么这个类就必须声明为抽象类。被定义为抽象的方法只需要声明其调用方式(类似接口),继承抽象类的时候,子类必须定义父类中的所有抽象方法。另外,这些方法的访问权限必须和父类定义的访问权限相同或更宽松(从严谨到宽松的排序:private、protected、public)。
静态属性
使用static关键字声明一个类的属性或者方法为静态,静态方法不需要实例化类即可直接访问。
final关键字
final关键字如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
子类调用父类构造方法
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。
高级
数据库操作
更新数据
我们创建了一个名为 "Persons" 的表,如下所示:
Peter
Griffin
35
Glenn
Quagmire
33
下面的例子更新 "Persons" 表的一些数据:
在这次更新后,"Persons" 表如下所示:
Peter
Griffin
36
Glenn
Quagmire
33
使用事务进行数据库操作(提高写入速度)
SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。
设置utf-8字符串
在数据库连接完成后,添加以下代码
数据更新
想对数据库里的某一条数据的某一项或多项进行更新,需要用到ON DUPLICATE KEY UPDATE
1
13488889999
1550131999000
test
需求是:当原来数据库里没有这一个
num的数据时,新增这一条数据,否则更新data和remarks。
id是设置了主键的,保证了它的唯一性,然后需要给num设置唯一索引,当需要增加或者更新数据时,执行下面的语句:
新增时,受影响的行数为1,更新时受影响的行数为2。
session
存储与获取
在进行session操作的时候,需要先通过session_start()启动会话。
销毁
如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:
unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_session变量。
您也可以通过调用 session_destroy() 函数彻底销毁 session,结束当前的会话,并清空会话中的所有资源:
注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。
文件操作
前端使用ajax将文件上传后,后端先将文件从缓存文件夹移动到你要存放文件的文件夹
请注意:在后端处理文件的时候,需要留意文件夹的权限问题,否则将会在执行move_uploaded_file时将会报错。
此时,若要读取文件,可以使用fgets()加feof()来分行读取文件
跨域处理
需要在后端接口入口页面设置允许跨域
如果遇到set-cookies无法存储的问题时,需要做如下设置
Last updated
Was this helpful?