- 静态网站&动态网站
- 静态网站:纯html页面,页面固定,不会变化,没有与后台服务器的交互,没有数据库支持
- 动态网站:需要与后台服务器进行交互,需要数据库支持
- 常见的服务器
- Apache:用于解析php类网站
- Tomcat:用于解析JSP类的网站
- 常见的数据库
- mysql,Access,Oracle,SQLServer
- php可以连接几乎所有的主流数据库
- B/S C/S
- B/S:浏览器/服务器结构,用户只需要通过浏览器即可访问的网站,大部分操作功能集中在后台服务器
- C/S:客户端/服务器结构,用户需要安装客户端使用的程序,客户端可以分担一定的操作功能
- 常见的开发php集成环境
- wamp:windows+apache+mysql+php
- lamp:linux+apache+mysql+php
- phpstudy
- appserver
- php中的数据类型
- 标量类型:
- 布尔型:Boolean
- false的7中情况
- 整型0
- 浮点型0.0
- 空字符串‘’
- 空数组 array()
- ‘0’字符串
- 布尔false
- null
- false的7中情况
- 整形:Integer
- 整数规则:
- 整数必须有至少一个数字(0-9)
- 整数不能包含逗号或空格
- 整数不能有小数点
- 整数正负均可
- 可用三种格式规定整数
- 十进制
- 十六进制(前缀是0x)
- 八进制(前缀是0)
- 整数规则:
- 浮点型:Float/Double
- 浮点类型不能运用到比较当中(精准的是不能运用到==运算中)
- 字符串:String
- 单引号
- 单引号不解析变量
- 单引号不能解析转义字符,只能解析单引号和反斜线本身
- 变量和变量,变量和字符串,字符串和字符串之间可以用.连接
- 双引号
- 双引号可以解析变量,变量可以使用{}和特殊字符包含
- 双引号可以解析所有转义字符
- 可以使用.连接
- 区别
- 单引号效率高于双引号
- 尽量使用单引号,遇到解析使用斜线()进行转义
- heredoc
- 类似于双引号
- newdoc
- 类似于单引号
- 两者都是用来处理大文本
- 单引号
- 布尔型:Boolean
- 复合类型:
- 数组:array
- count用于返回数组的长度
- 什么是数组
- 数组是特殊的变量,它可以保存一个以上的值
- 超全局数组
- 超全局变量不需要执行global就可以访问
- $_GLOBALS(包含后面所有的全局数组):用于在php脚本中的任意位置访问全局变量
- $_GET:收集提交method=“get”的html表单后的表单数据
- $_POST:收集提交method=“post”的html表单后的表单数据,也常用于传递变量
- $_COOKIE
- $_REQUEST(包含get、post、cookie,相当于万能钥匙,尽量不要使用,安全性能低):用于收集html表单提交的数据
- $_SESSION
- $_SERVER:保存关于报头、路径和脚本位置的信息
- $_SERVER['SERVER_ADDR'] :代表服务器端的ip地址
- $_SERVER['SERVER_NAME'] :服务器名称
- $_SERVER['REQUEST_TIME'] :请求时间
- $_SERVER['QUERY_STRING']
- $_SERVER['HTTP_REFERER'] :上级请求的页面,可能为空
- $_SERVER['HTTP_USER_AGENT'] :返回头信息的AGENT
- $_SERVER['REMOTE_ADDR'] :客户端的ip地址
- $_SERVER['REQUEST_URI']
- $_SERVER['PATH_INFO'] :处理路由
- $_FILES
- $_ENV
- php数组分为关联数组和索引数组,多维数组
- 索引数组:下标从0开始,依次增长
- 关联数组:下标为字符串格式,每个小标字符串与数组的值一一相关对应
- 多维数组
- 数组的一个值依然是数组,称为多维数组
- 多维数组不要求所有的项都是数组,可以是数组与普通值的混合
- 多维数组不要求子数组的个数限制,可以是任意的长度
- 使用多维数组,一定要注意,数组中分隔用逗号
- 原则上,多维数组一般不超过3层使用
- 数组声明方式
- 直接赋值
- []字面量声明
- Array()声明,没有new关键字
- php中,数组支持[]和{}读取下标
- 数组排序
- sort:以升序对数组排序
- rsort:以降序对数组排序
- asort:根据值,以升序对关联数组进行排序
- ksort:根据键,以升序对关联数组进行排序
- arsort:根据值,以降序对关联数组进行排序
- krsort:根据键,以降序对关联数组进行排序
- 数组遍历
- 使用for循环遍历数组
- count:用于统计数组元素的个数
- for循环只能用于遍历,纯索引数组
- 如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界
- 对象:object
- 在php中,必须明确的声明对象
- 首先必须声明对象的类,使用class关键词,类是包含属性和方法的结构
- 数组:array
- 特殊类型
- 资源:resource
- 空:null
- null的三种情况
- 直接赋值为null
- 未定义的变量
- unset销毁的变量
- null的三种情况
- 常量
- 有效的常量名以字符或下划线开头(常量名称前面没有$符号)
- const
- define(三个参数)
- 首个参数定义常量的名称
- 第二个参数定义常量的值
- 可选的第三个参数规定常量名是否对大小写不敏感,默认是false
- 区别
- const更快,是语言结构,define是函数
- define不能用于类常量的定义,const可以
- 常量一经定义,不能被修改,不能被删除
- 预定义常量
- __FILE__:返回文件路径和文件名称
- __LINE__:所在行的行号
- __DIR__:目录所在目录
- __FUNCTION__:所在函数体的函数名称
- __CLASS__:类名
- __TRAIT__
- __METHOD__:类名加方法名
- __NAMESPACE__:返回namespace的名称
- 标量类型:
- false的情况
- 1、Boolean:false
- 2、整形:0
- 3、浮点型:0.0
- 4、字符串:“”“0”
- 5、空数组
- 6、空对象
- 7、null和尚未定义的变量
- 8、所有资源都算对
- php函数
- 局部变量:声明在函数内部的变量,称为局部变量,只能在函数内部使用,函数外需要使用,需要函数中使用return关键字返回
- 全局变量:声明的函数外部的变量,称为全局变量
- 函数中使用变量,默认使用内部局部变量,如果需要使用全局变量,需要使用global关键字,将全局变量引入函数
- function_exists():用于检测函数是否已声明
- setType(),函数强转:bool | setType(mixed var,String type)第一个参数表示任何类型的变量,第二个参数表示字符串类型的数据类型,返回Boolean结果
- range(0, 1000) :创建0到1000的数组
- memory_get_usage:查看内存使用空间
- strlen:函数返回字符串的长度,以字符计,空格也算一个字符,汉字占3个字符
- str_word_count:对字符串中的单词进行计数,一个单词是一个数,I am是两个数,I to there是三个
- strrev:反转字符串,将字符串倒着输出
- strpos:用于检索字符串内指定的字符或文本,两个参数,第一个是字符串,第二个是需要找到的字符串,返回的是找到字符串的第一个字符的位置,没有返回false
- str_replace:用一些字符串替换字符串中的另一些字符,三个参数,第一个是需要替换的字符串,第二个是替换成什么,第三个是替换哪个字符串
- php中判断类型
- is_bool:判断是否是布尔型
- is_int、is_integer、is_long:判断是否为整型
- is_float、is_double、is_real:判断是否为浮点型
- is_string:判断是否为字符串
- is_array:判断是否为数组
- is_object:判断是否为对象
- is_resource:判断是否为资源类型
- is_null:判断是否为null
- is_scalar:判断是否为标量
- is_numeric:判断是否是任何类型的数字和数字字符串
- is_callable:判断是否是有效的函数名
- php输出语句
- echo “” 输出变量的值
- var_dump(); 输出变量的数据类型&值【&一些其他信息】
- print_r(); 专门用于打印数组
- 运算符
- 字符串运算符
- . 串接
- .= 串接赋值
- 算术运算符
- +、-、*、/、%、++、--
- 赋值运算符
- =、+=、-=、*=、/=、%=、.=(连接字符串)
- 比较运算符
- >,<,>=,<=,==,===,<>,!=,!==
- ==:要求值相等,而不需要数据类型相等
- ===:要求值和数据类型,必须相等
- !=:只比较值,值相等为false
- !==:比较值和类型,值和类型都相等为false
- 逻辑运算符
- and/&&、or/||、not/! xor
- &&和||进行运算的时候,会发生短路(当左侧能够判断出结果的时候,便不再执行右侧)
- xor:逻辑异或,两边只有一个对的,结果为true,两边同为true或同为false,结果都为false
- 其他运算符
- 表达式1?表达式2:表达式3:表达式1成立执行表达式2,否则执行表达式3
- ‘’:调用系统dos环境下的命令行并执行
- @:错误信息控制符,可以临时屏蔽到一些小的错误信息,放在php表达式之前
- 10进制转为2进制
- &:与,转成二进制,两个都是1,结果才为1
- |:或,转成二进制,有一个为1,结果就为1
- ^:异或,转成二进制,两个不相同为1,两个都相等结果为0
- ~:取反,转成二进制,所有位数取反,1--->0,0--->1
- <<:左移
- >>:右移
- 运算符的优先级
- 递增/递减>算符运算符>大小比较>(不)相等比较>引用>位运算符(^)>位运算符(|)>逻辑与>逻辑或>三目>赋值>and>xor>or
- 字符串运算符
- 缓存
- cookie:cookie保存的客户端浏览器中,cookie是Http头的一部分,通过浏览器请求页面,它会被通过Http头的形式发送过去,被请求的页面,可以通过php来获取coolie的值
- 设置cookie
- bool setcookie(string name,[string value],[int expire],[string path],[string domain])
- setcookie(“username”,“nostop”,time()+3600,“/”,“example.com”)
- name:cookie(必填)
- value:cookie值
- expire:过期时间,时间戳格式,不设置默认为会话级cookie,浏览器关闭后cookie失效
- path:服务器端有效路径,默认为当前设置cookie时页面的路径,‘/’表示整个域名有效,‘/A’表示A分类目录下的页面有效,只有设置的路径包含的页面才可以拿到cookie
- domain:该cookie有效域名,只有指定的域名才可以拿到cookie,默认所有域名都可以拿到
- 获取cookie
- php内置了$_COOKIE变量以访问设置cookie的值
- echo $_COOKIE[“username”]
- 销毁cookie
- 可以通过设置cookie过期时间为以前的时间点来销毁一个cookie
- setcookie(“username”,“”,time()-3600);
- cookie注意事项
- setcookie()之前不能有任何htmk输出,空格空白行都不行
- setcookie后,当前页调用echo $_COOLIE["name"]不会有输出必须刷新或到下一个页面在过期之前才可以看到cookie值
- 由于cookie信息储存于用户的计算机中,有可能伪造或修改cookieconger造成cookie欺骗,一般可以对cookie的值进行加密来预防欺骗,读取cookie的时候,对cookie解密即可
- cookie是保存在客户端的,用户禁用了cookie,cookie自然也没作用了
- isset:检测cookie变量是否已被设置
- cookie保存的是字符串信息
- cookie在保存过程中,会对中文进行urlencode编码,cookie可以有多个key=>val,可以给不同的键值制定不同的有效时间
- 变量
- php变量作用域
- 三种不同的变量作用域(如果类内想要访问全局需要加global,类外访问类内需要加local)
- local(局部)
- 函数内部声明的变量拥有LOCAL作用域,只能在函数内部进行访问
- global(全局)
- 函数之外声明的变量拥有Global作用域,只能在函数以外进行访问
- static(静态)
- local(局部)
- 三种不同的变量作用域(如果类内想要访问全局需要加global,类外访问类内需要加local)
- php变量规则
- 变量以$符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数组开头
- 变量名称只能包含字符数组字符和下划线(A-z、0-9以及_)
- 变量名称对大小写敏感($y和$Y是两个不同的变量)
- 引用变量
- php中引用意味这用不同的方法访问同一个变量
- 使用的符号:&
- $a = range(0,3);
- $b = &$a;
- $b和$a占用同一个内存空间,$b不开辟新的内存空间,可以使用memory_get_usage查看内存使用空间
- zval变量容器 :xdebug_debug_zval(),需要安装扩展才可以使用
- unset:只会删除引用变量$b,不会删除$a(包括内存空间
- php变量作用域
- 循环
- for
- init counter:初始化循环计数器的值
- test counter:评估每个循环迭代,值为true,继续循环,值为false,循环结束
- while
- foreach
- 循环值适用于数组,并用于遍历数组中的每个键/值对
- 每进行一次循环迭代,当前数组元素的值就会被赋值给$valse变量数组指针逐一移动,直到最后一个数组元素
- for