PHP基础知识总结

1. 引用变量

<?php
$a = range(0, 1000);
var_dump(memory_get_usage());
// COW: Copy On Write 有修改操作才会进行copy
// $b = $a;
$b = &$a;
var_dump(memory_get_usage());
$a = range(0, 1000);
var_dump(memory_get_usage()); 

// zval变量容器
$c = range(0, 3);
// 需安装xdebug扩展
xdebug_debug_zval('c');
$d = $c;
xdebug_debug_zval('c');
$c = range(0, 3);
xdebug_debug_zval('c');

// unset 只会取消引用,不会销毁空间

// 对象本身就是引用传递
class Person
{
  public $name = "zhangsan";
}
$p1 = new Person;
xdebug_debug_zval('p1');
$p2 = $p1;
xdebug_debug_zval('p1');
$p2->name = "lisi";
xdebug_debug_zval('p1');

 

  概念:用不同的名字访问同一个变量内容

  定义方式:&

  工作原理:

 

2.  常量及数据类型

  字符串的定义方式:单引号,双引号,heredoc和newdoc  区别:单引号不能解析变量,不能解析转义字符,只能解析单引号和反斜线本身,效率比双引号高;双引号可以解析变量,变量可以使用特殊字符和{}包含,可以解析所有转义字符;heredoc和newdoc分别类似于双和单引号,都用来处理大文本

  数据类型:标量,复合,特殊  
  1. 浮点类型不能运用到比较运算中;
  2. boolean的false的七种情况;
  3. 超全局数组:$GLOBALS,$_GET,$_POST,$_REQUEST,$_SESSION,$_COOKIE,$_SERVER,$_FILES,$_ENV
  4. NULL的三种情况:直接赋值,未定义的变量,unset销毁的变量

  常量:const更快,是语言结构,可以定义类常量;define是函数,不能用于类常量的定义;常量一经定义,不能被修改和删除  预定义常量:__FILE__,LINE DIR FUNCTION CLASS TRAIT METHOD  NAMESPACE

3. 运算符

     错误控制符@:放置在一个表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

  运算符优先级:++/-- > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用>^>|>逻辑与>逻辑或>三目>赋值>and > xor > or 

  比较运算符:==和===的区别;等值判断(false的7种情况都是等值)

  ++/--:不影响boolean值;--NULL没有效果,++NULL为1

  逻辑运算符:短路作用;||和&&与or和and优先级不同

4. 流程控制

  遍历数组的3种方式及各自的区别:for循环只能遍历索引数组;foreach可以遍历索引和关联数组,会reset();联合使用list(),each()和while循环同样可以遍历索引和关联数组,不会reset()操作(将数组指针回到开头)。

  分支:使用elseif时,总把优先范围小的条件放在前面处理;switch后面的控制表达式的数据类型只能是整形,浮点或字符串;continue作用到switch的作用类似于break;跳出switch外的循环可以使用continue 2;switch...case...会生成跳转表,直接跳转到对应case

5. 自定义函数和内部函数

  变量作用域:它定义的上下文背景(也是它的生效范围),大部分变量只有一个单独的范围,跨度同样包含了include和require引入的文件;global关键字的作用;$GLOBALS及其他超全局数组;

  静态变量:仅在局部函数域中存在,程序执行离开此作用域时其值不会消失;static:仅初始化一次,初始化时需要赋值,每次执行函数该值会保留,修饰的变量是局部的,仅在函数内部有效,可以记录函数的调用次数,从而在某些条件下终止递归,初始static变量未赋值时值为NULL

  函数的参数:默认情况下通过值传递;如果希望允许函数修改它的值,必须通过引用传递参数

  函数的返回值:可返回包括数组和对象的任意类型;省略return,返回值为NULL,不可有多个返回值;从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用&

  外部文件的导入:include/require包含并运行指定文件;如果给出路径名按照路径查找,否则从include_path中查找,再没有则从调用脚本文件所在的目录和当前工作目录下寻找;当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围;加载过程中未找到文件则include会发出一条警告,后者会发出一个致命错误;include(require)/include_once(require_once)唯一区别是会检查该文件是否已经被包含过,如果是则不会再次包含

  系统内置函数:
  时间日期:date() strtotime() mktime() time() microtime() 
  IP处理:ip2long() long2ip()
  打印处理:print() printf() print_r() echo sprintf() var_dump() var_export()
  序列化及反序列化函数:serialize() unserialize() 
  字符串处理:implode() explode() join() strrev() trim() strstr() number_format()
  数组处理:array_keys() values() diff() intersect() merge() shift() unshift() pop() push() sort() rand()

6. 正则表达式

  作用:分割,查找,匹配,替换字符串

  分隔符:/,#,~

  通用原子:\d \D \w \W \s \S

  元字符:. * ^ $ + {n} {n,} {n,m} [] () [^] | [-]

  模式修正符:i m e s U x A D u

  后向引用:'/<b>(.*)<\/b>/' preg_replace($pattern, '\\1', $str)

  贪婪模式:'/<b>.*?<\/b>/' 或者'/<b>.*<\/b>/U' preg_replace_all($pattern, '\\1', $str)

  PCRE函数:preg_match() preg_match_all() preg_replace() preg_split()

  中文匹配:UTF-8汉字编码范围是0x4e00-0x9fa5,在ANSI(gb2312)环境下0xb0-0xf7,0xa1-0xfe,utf-8要使用u模式修正符使模式字符串被当成utf-8,在ANSI(gb2312)环境下要使用chr将ascii码转换为字符

7. 文件及目录处理

  文件读取/写入操作:fopen() 打开模式:r/r++,w/w++,a/a++,x/x++,b,t 
  写入函数:fwrite() fputs() 
  读取函数:fread() fgets() fgetc() 
  关闭文件函数:fclose() 
  不需要fopen()打开的函数:file_get_contents() file_put_contents() 
  其它读取函数:file() readfile() 
  访问远程文件:开启allow_url_fopen(),HTTP协议连接只能使用只读,FTP协议可以使用只读或者只写

  目录操作函数:
  名称相关:basename() dirname() pathinfo()
  目录读取:opendir() readdir() closedir() rewinddir()
  目录删除:rmdir()
  目录创建:mkdir()
  文件大小:filesize()
  目录大小:disk_free_space() disk_total_space()
  文件拷贝:copy()
  删除文件:unlink()
  文件类型:filetype()
  重命名文件或者目录:rename()
  文件截取:ftruncate()
  文件属性:file_exists() is_readable() is_writeable() is_executable() filectime() fileatime() filemtime()  
  文件锁:flock()
  文件指针:ftell() fseek() rewind()

8. 会话控制

  通过GET参数传递,信息会暴露,参数可能丢失

  cookie:有服务器发送给客户端的片段信息
  操作:setcookie() $_COOKIE 
  优缺点:不占用服务器资源,效率高些;不建议保存敏感信息,用户有权禁用

  session:基于cookie,利用cookie传递的sessionID信息在服务器中查找对应文件
  操作:session_start() $_SESSION session_destory() session.auto_start  .cookie_domain .cookie_lifetime .cookie_path .name  .save_path  .use_cookies  .use_trans_sid  .gc_probability  .gc_devisor  .gc_maxlifetime  .save_handler
  优缺点:信息安全,占用服务器资源

  传递sessionID的问题:session_name()  session_id() SID

  session存储:session_set_save_handler()   mysql,memcache,redis等

9. 面向对象

  类权限控制修饰符:public protected private    

  封装:成员访问权限

       继承:单一继承;方法重写 parent::

  多态:抽象类的定义;接口的定义

  魔术方法:__construct(),destruct,call,callStatic,get,set,isset,unset,sleep,wakeup,toString,clone

  常见设计模式:工厂,单例,注册树,适配器,观察者,策略

10. 网络协议

  HTTP协议状态码:五类响应 1XX:信息类,接收请求状态处理 2XX:成功,请求正常处理完毕 3XX:重定向,需要附加操作以完成请求 4XX:客户端错误,服务器无法处理请求 5XX:服务器错误状态码,服务器处理请求出错  常见状态码:200 204 206 301 302 303 304 307 400 401 403 404 500 503

  OSI7层模型:物理: 建立,维护,断开物理连接  数据链路:建立逻辑链接,进行硬件地址寻址,差错校验等功能  网络:进行逻辑地址寻址,实现不同网络之间的路径选择  传输:定义传输数据的协议端口号,以及流控和差错校验  会话:建立管理终止会话  表示:数据表示安全压缩  应用:网络服务与最终用户的一个接口

  HTTP协议的工作特点和工作原理:基于B/S模式,通信开销小,简单快速,传输成本低,使用灵活,可使用超文本传输协议,节省传输时间,无状态; 客户端发送请求给服务器,创建一个TCP连接,指定端口号,默认80,连接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容

  HTTP协议常见请求/响应头:Content-Type, Accept, Origin, Cookie, Cache-control,   User-Agent, Referrer, X-Forwarder-For, Access-Control-Allow-Origin, Last-Modified

  HTTP协议的请求方法:GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE
  GET和POST的区别:GET在后退和刷新没有变化,无害;POST会重新提交。GET可以收藏为书签,POST不行。GET可以在浏览器缓存,POST不行。GET编码类型Appication- ,POST还有multipart- ,文件上传时需改为post。GET参数会保存在历史记录中,POST不会。GET向url添加数据长度受限,POST无限制。GET只允许ascii字符,POST无限制。GET安全性差。

  HTTPS的工作原理:一种基于SSL/TLS的HTTP协议,所有的HTTP数据都是在SSL/TLS协议封装之上传输的。在HTTP协议基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。

  常见网络协议含义及端口:FTP21Telnet23 SMTP25 POP3110 HTTP80 DNS53 

11. 开发环境及配置

  版本控制软件:集中式 CVS和SVN 和分布式Git 容灾性,不用连接网络?

  PHP的运行原理:Nginx+PHP-FPM(FastCGI的进程管理器,master监听端口和worker处理PHP代码)
  CGI:PHP解析器和webserver的连接 FastCGI:每次处理完请求后不会kill掉进程,使其一次处理多个请求,不用重新fork一个进程

  PHP常见配置项:register_globals, allow_url_fopen, allow_url_include, date.timezone, display_errors, error_reporting, safe_mode, upload_max_filesize, max_file_uploads, post_max_size 

posted @ 2019-05-13 11:41  若不离则不弃  阅读(983)  评论(0编辑  收藏  举报