php基础

php

Hypertext Preprocessor //超文本预处理器

吸收了C语言,java和perl的特点,利于学习,使用广泛,主要适用于web开发领域

1.1特性

  1. php独特的语法混合了c,java,perl以及php自创新的语法
  2. php可以比CGI或者prel更快速的执行动态页面——动态页面方面,与其他的编程语言相比,php是将程序嵌入到HTML文档中去执行,执行效率比完全生成html标记的OGI要高许多;php具有非常强大的功能所有CGI的功能都能实现
  3. php支持几乎所有流行的数据库以及操作系统
  4. 最重要的是php可以用c,c++进行程序的扩展

1.2基础语法

1.2.1标记

<?php ?> //标记

也允许使用<? ?>,但不鼓励使用,更改配置文件为short_open_tag=on

php标记与html标记可以混合使用,php解释器会将php标记中的代码执行结果作为html的内容

1.2.2注释

// //行注释

# //函数注释

/* */ //块级注释

输入输出

前端获取,表单提交 //输入

echo “” //字符串输出

print() //字符串输出

print_r([]) //数组输出

var_dump() //调试输出

1.3数据类型&类型转换

1.3.1数据类型

标准类型

boolean(布尔型)

string(字符串)

integer(整形)

float(浮点型) //double

复合类型

array //数组

object //对象

特殊类型

null //空

resource //资源

1.3.2类型转换

强制转换

(类型名)被转换的数据

转换函数

intval(),floatval(),strval(),boolval()

1.4变量&常量

1.4.1变量

1.1定义

在php中,虽然数据有类型之分,但是保存数据的变量却不需要类型,php会自动判断变量中保存的是什么类型的数据

以$开头

一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线

1.2销毁变量

unset()

1.3变量判断

empty() //判断变量是否为false或不存在

isset() //判断变量是否存在且不为null

1.4预定义变量

$_GLOBALS:局部变量作用全局

$_SERVER:服务器和执行环境的信息

$_REQUEST:包含get,post,cookie的所有信息

$_POST:通过post提交

$_GET:通过get获取

$_FILES:通过post上传到服务器的文件数据

$_ENV:通过环境方式传递给当前脚本的变量组成的数组

$_COOKIE:通过http cookie 方式传递给当前脚本的变量组成的数组

$_SEESSION:当前脚本可用session变量组成的数组

1.5全局变量

函数外定义的变量

1.6局部变量

函数内定义的变量

静态变量static //不会因为函数的调用而销毁

可变函数 //如果一个变量名后有圆括号,php将寻找与变量的值同名的函数

ps:

  • 若全局变量和局部变量重名,默认使用局部变量
  • 局部内使用global声明全局
1.7超全局变量

$globals数组,所有的全局变量都是此数组的一个键

$_SERVER这是一个包含了诸如头信息(header),路径(path),以及脚本位置(script locations)等等信息的数组。这个数组中的项目由web服务器创建
$_GET通过url参数传递给当前脚本的变量的数组
$_POST当http post请求的content-type是application/x-www-form-urlencoded
$_FILES通过http post方式上传到当前脚本的项目的数组
$_COOKIE通过http cookies方式传递给当前脚本的变量的数组
$_SESSION当前脚本可用SESSION变量的数组
$_REQUEST默认情况下包含了 G E T , GET, GET,POST,$_COOKIE的数组
$_ENV通过环境方式传递给当前脚本的变量的数组

1.4.2常量

  • 整形常量
  • 浮点型常量
  • 字符串常量 //在php中,单引号和双引号都表示字符串常量
1.1定义

php中没有宏这样的c语言概念,但是它定义常量的方式容易引起误会,因为它使用的是define函数

ps:

  • 在定义常量时,常量的名字需要用字符串来传递,而它的初始值可以是任意类型
  • 一旦被定义就不能被重新定义或取消定义
  • 常量名没有$

define()函数来定义常量,const类定义之外定义常量

1.2预定义常量

php_version /php版本号

php_eol //

魔术常量

1.5变量作用域

1)local

2)global

3)static

4)parameter

1.6运算符&表达式

1.6.1算数运算符

运算符描述
x + x+ x+y
x − x- xy
x ∗ x* xy
x / x/ x/y
x x% xy模 //除法的余数
-$x取反
a . a. a.b并置

1.6.2赋值运算符

运算符描述
x = x= x=y左操作数被设置为右侧表达式的值
x + = x+= x+=y
x − = x-= x=y
x ∗ = x*= x=y
x / = x/= x/=y
x x%= xy模 //除法的余数
a . = a.= a.=b连接两个字符串

1.6.3递增递减运算符

运算符描述
++$x预递增
$x++后递增
–$x预递减
$x–后递减

1.6.4比较运算符

运算符描述
x = = x== x==y等于
x = = = x=== x===y绝对等于 //判断类型
x ! = x!= x!=y不等于
x < > x<> x<>y不等于
x ! = = x!== x!==y绝对不等于 //判断类型
x > x> x>y大于
x < x< x<y小于
x > = x>= x>=y大于等于
x < = x<= x<=y小于等于

1.6.5逻辑运算符

运算符描述
$x and $y
$x or $y
$x xor $y异或
$x && $y
$x || $y
!$x

1.6.6三元运算符

(expr1)?(expr2):(expr3)

1.6.7其他运算符

运算符名称描述
@错误控制运算符语句出错时不会终止脚本运行
``执行运算符将内容作为命令行来执行
instanceof类型运算符检测变量是否是属于某种类型

1.7数组

  • 由键值对组成,在初始化时,使用=>符号来初始化键值对
  • 在初始化时,如果只指定了值而没有给定键,php默认使用数值作为键,且这些键会自动递增
  • 数组可以嵌套
  • 给数组中不存在的键赋值时,会先创建该键,然后再赋值
  • 获取数组中不存在的键的值,会报错

1.7.1创建数组

使用函数 //arry&range

使用中括号[] //自变量

1.7.2分类

1.1索引数组

定义数组时如果没有指定键,那么这个数组可被称为索引数组

索引数组实际是字典,只不过在初始化时并没有指定它们的键,php默认使用自动增长的数字作为值得列表

下标纯数字,默认0

1.2关联数组

关联数组实际就是字典,在初始化时,需要使用=>来分别指定键值,运算符得左边是键,右边是值

下标不是数字

ps:

数组中的下标是不重复的,如果重复了,后面的值会覆盖前面的值,保留一个

1.3多维数组

多维数组的本质就是使用数值作为键,使用另一个数组作为值

1.4数组的输出

下标或键·

1.5数组操作函数
函数名描述
array()创建数组
array_keys()返回数组中所有的键名
array_key_exists()检查指定的键名是否存在于数组中
array_pop()删除数组的最后一个元素 //出栈
array_push()将一个或多个元素插入数组末尾 //入栈
array_rand()返回数组中一个或多个随机的键
array_reverse()以相反的顺序返回数组
array_slice()数组切片
array_splice()删除并替换数组中指定的元素
count()返回数组中元素的数目
shuffle()将数组打乱

1.8语句

1.8.1条件语句

if

if else

switch

1.8.2循环语句

while

do while

for

foreach

1.8.2结束循环

break #跳出当前循环

continue #舍弃后置代码继续循环

goto #跳转位置

1.9函数

php中使用function作为定义函数的关键字,php中的函数并不需要说明返回值类型,如果函数存在参数,参数也不需要说明类型

php中的函数支持默认参数,但是不支持函数重载,也就意味着在php中不能同时存在两个同名函数

function //函数定义

1.9.1函数调用

在php中调用函数和在c语言中调用函数是一样的:通过函数名调用即可

函数返回:return

1.9.2函数传参

函数的形参中定义了几个形参,在调用函数时就需要提供几个形参,但是有些时候是有例外的,例如,在定义函数时,如果设置了默认形参,那么在调用该函数时就不需要传递已经设置了默认形参的参数

在函数内部修改了形参,实参的值也不会受到影响(除非传递的是数组类型),但是在定义函数的时候,如果将形参的类型修饰为引用类型,在函数内部修改形参就能修改实参

  • 值传递 //拷贝值
  • 引用传递 //拷贝地址

1.9.3默认传参

从右往左依次设置

1.9.4引用类型传参

在默认情况下,修改形参是不能作用到实参上的,因为形参和实参是两个独立的内存单元( 不包含数组)

实现方法 //在形参名前加上符号:&即可

1.9.5可变长参数

可变长参数实现之后的结果类似于printf这样的函数,它可以接收无限个参数

实现方法 //定义一个参数,并在参数名前加上…

实现原理 //在函数调用时,php会将这个函数的实参列表打包成一个数组,然后传给函数,函数在内部访问这个数组就能得到所有参数了

不定传参

命名传参 //关键字传参

1.9.6闭包

php中,需要在闭包函数中使用use关键字,并在圆括号中填写那些将会在闭包内部使用的变量

匿名函数

2.1字符串

单引号 //‘’,不解析变量,不解析转义字符

双引号 //“”,如果出现了变量名没那么会解析出来作为字符串的一部分

定界符 //<<<,也可解析,可写多行

2.1.1字符串操作

html操作

函数名描述语法
addcslashes()返回在指定的字符前添加反斜杠的字符串
addslashes()返会在预定义的字符前添加反斜杠的字符串
html_entity_decode()把html实体转换为字符
htmlentities()把字符转换为html实体
htmlspecialchars_decode()把一些预定义的html实体转换为字符
htmlspecialchars()把一些预定义的字符转换为html实体
nl2br()在字符串的每个新行之前插入html换行符
strip_tags()剥去字符串中的html和php标签
stripcslashes()删除由addcslashes()函数添加的反斜杠
stripslashes()删除由addslashes()函数添加的反斜杠

常规字符串操作

函数名描述语法
chunk_split()将字符串分割为一连串更小的部分 //该函数不改变原始字符串chunk_split(string,length,end)
str_split()将字符串分割到数组中str_split(string,length)
strtok()将字符串分割为更小的字符串 //标记strtok(string,split)
explode()将字符打散为数组explode(separator,string,limit)
str_shuffle()随机打乱字符串中的所有字符str_shuffle(string)
implode()返回由数组元素组合成的字符串implode(separator,array)
join()返回由数组元素组合成的字符串 //implode()别名join(separator,array)
bin2hex()将ascii字符的字符串转换为十六进制值bin2hex(string)
hex2bin()将十六进制值得字符串转换为ascii字符hex2bin(string)
lcfirst()将字符串中的首字符转换为小写lcfirst(string)
ltrim()移除字符串左侧的空白字符或其他预定义字符ltrim(string,charlist)
rtrim()移除字符串右侧的空白字符或其他预定义字符rtrim(string,charlist)
trim()移除字符串两侧的空白字符或其他预定义字符trim(string,charlist)
number_format()通过千位分组来格式化数字 //该函数支持一个两个或四个参数number_format(number,decimals,decimalpoint,separator)
similar_text()计算两个字符串的相似度similar_text(string1,string2,percent)
str_ireplace()替换字符串中的字符 //不区分大小写str_ireplace(find,replace,string,count)
str_replace()替换字符串中的字符 //区分大小写str_replace(find,replace,string,count)
str_repeat()将字符串重复指定次数str_repeat(string,repeat)
str_word_count()计算字符串中的单词数str_word_count(string,return,char)
strcasecmp()比较两个字符串 //不区分大小写strcasecmp(string1,string2)
strcmp()比较两个字符串 //区分大小写strcasecmp(string1,string2)
strchr()搜索字符串在另一字符串中的第一次出现strchr(string,search,before_search)
strpos()查找字符串在另一字符串中第一次出现的位置 //区分大小写strpos(string,find,start)
strlen()返回字符串的长度strlen(string)
stristr()搜索字符串在另一字符串中的第一次出现 //不区分大小写stristr(string,search,before_search)
stripos()查找字符串在另一字符串中第一次出现的位置 //不区分大小写stripos(string,find,start)
strrchr()查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符strrchr(string,char)
strrev()反转字符串strrev(string)
strtoupper()将所有字符转为大写strtoupper(string)
strtolower()将所有字符转为小写strtoupper(string)
substr()返回字符串的一部分substr(string,start,length)

字符串输出函数

函数描述
echo()输出一个或多个字符串
print()输出一个或多个字符串
printf()输出格式化字符串
fprintf()把格式化的字符串写入到指定的输出流
sprintf()把格式化的字符串写入变量中
sscanf()根据指定的格式解析来自字符串的输入
parse_str()把查询字符串解析到变量中

ascii和字符互转

函数描述
chr()从指定的ascii值返回字符
ord()返回字符串中第一个字符的ascii值

hash计算

函数描述
crc32()计算字符串的32位CRC
md5()计算字符串的MD5散列
md5_file()计算文件的MD5散列
shal()计算字符串的SHA-1散列
shal_file()计算文件的SHA-1散列

2.2表单

html表单

$_GET&$_POST

文件上传表单

保存上传的文件

copy()

2.2.1http协议

工作方式

  • 由客户端(浏览器)主动向服务端发出数据(请求)
  • 由服务端被动向客户端回复数据(响应)

特点

  • 无连接 //限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可节省传输时间
  • 无状态 //协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

url

统一资源定位符 //标识某处资源的地址

请求

请求行(request line),请求头部(header),请求数据,空行

请求方法

方法描述
GET请求指定的页面信息,并返回实体主体
HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT从客户端向服务器传送的数据取代指定的文档的内容
DELETE请求服务器删除指定的页面
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器性能
TRACE回显服务器收到的请求,主要用于测试或诊断

响应

状态行(status line),响应头部(header),空行,响应数据

状态行提供一个状态码

响应行 //由键值对组成,用于描述响应数据,或用于对客户端下达指令

应答头说明
Allow服务器支持的请求方法
Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型
Set-Cookie表示内容长度
Content-Length表示后面的文档属于什么MIME类型。通常需要显式地指定为text/html
Content-Type应该在什么时候认为文档已经过期,从而不在缓存它
Expires从服务端生成并传送给客户端的cookie,客户端(浏览器)会保存这些cookie

状态码

200 //请求成功

301 //资源转移

404 //请求页面不存在

500 //表示内部服务器错误

2.2.1ajax

2.3面向对象

类定义 //class

伪变量 //$this

2.3.1类成员属性

类的成员变量叫做属性

成员属性声明是由关键字public,protected或private开头,然后跟一个普通的变量或常量声明来组成。属性中的变量可以初始化,但初始化的值必须是常数

1.1使用

在类中:

​ $this -->实例属性名

​ self::常量或静态属性名

在类外:

​ $对象名 -->实例属性名

​ $对象名::常量或静态属性名

ps:

关键字var也可以声明一个成员属性,它与public是一样的。通过$this和类名也能访问常量属性

2.3.2类成员方法

类的成员函数叫做方法,成员方法和属性一样,将一个函数放在类中定义,这个函数就是该类的成员方法

函数名前可以加上关键字public,protected或者private

和使用成员属性一样,调用成员方法的方式也有两种,一种是在类内,一种是在类外

在类内调用成员方法时,需要通过$this->,在类外调用成员方法时,通过对象来调用

2.3.3静态成员

  • static //定义静态成员
  • 静态成员也可以加上三大访问权限
  • 在静态成员方法中,不能直接访问成员属性,也不能直接调用成员方法,但是可以访问静态成员变量

static function //静态方法

2.3.4封装&继承

封装

php通过类的访问控制符实现了封装性,访问控制符主要用于控制成员在类外的可见性

访问控制符:

  • public //公有属性,类内外都能访问
  • protected //保护属性,在类外无法访问,类内和子类可访问
  • private //私有属性,类外和类内都无法访问
  • 如果定义的成员属性没有指定访问控制符,那么默认为public

继承

extends //继承

继承后,子类发生变化:

  • 子类会得到父类中的所有成员属性和成员方法
  • 当子类编写构造函数,那么默认不调用父类的构造函数,需要手动调用,调用的时候,通过parent::__construct()的方式来调用
  • 当子类的成员属性和父类的成员属性同名时,会覆盖父类的属性
  • 当子类的成员方法和父类的成员方法同名时,在成员函数内部可以通过parent::方法名()来调用父类的同名方法

魔术方法

遍历对象

类的继承

2.3.5抽象类

定义为抽象的类不能被实例化

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中的一样(或者更为宽松)。例如某个抽象的方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用必须匹配,即类型和所需参数数量必须一致

作为基类,被继承

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法

final //修改方法,子类中不能出现同名方法

2.3.6文件包含

在php中,一个文件使用一个类之前,如果这个文件中没有定义该类,就会报错,在php中可以使用require和require_once关键字来将另一文件引入到本文件中,两者的区别在于,前者不会检查是否重复包含,,而前者会

2.3.7命名空间

类似于目录

在一个php源码文件中不能同时定义两个同名函数,两个同名类,两个同名变量等等,而加入命名空间之后,相当于将两个同名函数/类/变量放入不同的目录下,避免了命名冲突,

1.1定义方法

namespace如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,也就是说命名空间必须是程序脚本的第一条语句

1.2子命名空间

与目录与文件相似,php命名空间也允许指定层次化的命名空间的名称,因此,命名空间的名字可以使用的分层次的方式定义

1.3使用命名空间

直接使用

2.4cookie

一般用于凭据

$_COOKIE变量

setcookie函数

2.5session

会话

验证码机制

session_start() //函数,必须位于html标签前

$_SESSION

session_destroy()

2.6文件上传

$_FILES

name //文件名

tmp_name //路径

path //临时存储路径

2.7php扩展

在php根目录中,文件夹ext中 //php.ini配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值