php学习笔记【1】


一、PHP7在zend虚拟机执行过程

读入脚本程序字符串,经由词法分析器将其转换为单词符号,接着语法分析器从中发现语法结构后生成抽象语法树,再经静态编译器生成opcode,最后经解释器模拟机器指令来执行每一条opcode。

二、php sapi

SAPI 即 Server API ,是应用程序与外部程序的通讯协议。PHP脚本要执行有很多方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。
SAPI提供了一个和外部通信的接口,常见的SAPI有:cgi、fast-cgi、cli、apache模块的DLL、isapi

2.1 cgi

cgi是处理web服务器的动态请求的一种方式,通过fork一个进程来处理一个请求。但是效率是很低下的,频繁的创建和销毁线程。所以通过一个中间层 fastcgi 来进行对cgi程序的管理。
这种方式的话就是通过 fastcgi 来对于cgi进程管理,使得一个cgi程序就能主管一个功能模块。

2.2 FastCGI

PHP使用PHP-FPM(FastCGIProcessManager),全称PHPFastCGI进程管理器进行管理。
FastCGI的工作原理:

  1. Web Server启动时载入FastCGI进程管理器
  2. FastCGI进程管理器自身初始化,启动多个CGI解释器(可见多个php-cgi)并等待来自Web Server的连接
  3. 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web Server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
  4. FastCGI子进程php-cgi完成处理后,将标准输出和错误信息从同一连接返回Web Server。
  5. 当FastCGI子进程关闭连接时,请求便告知处理完成。FastCGI子进程接着等待并处理来自FastCGI继承管理器的下一个连接。
  6. 在CGI模式中,php-cgi在此便退出了。

2.3 ISAPI

ISAPI(Internet Server Application Program Interface)是微软提供的一套面向 WEB 服务的 API 介面,它能实现 CGI 提供的全部功能

三、PHP IteratorAggregate

3.1 迭代器(iterable)

iterable是一个超级接口,可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。

3.2 实现

在下面的PHP脚本,一个类,它实现IteratorAggregate接口所有包含数组作为property,getIterator()方法返回ArrayIterator对象出这个数组。我们可以使用foreach循环遍历数组。

<?Php
class myIterator implements IteratorAggregate {
   public $arr;
   public function __construct() {
      $this->arr = array(10,20,30,40);
   }
   public function getIterator() {
      return new ArrayIterator($this->arr);
   }
}
$obj = new myIterator();foreach($obj as $key => $value) {
   echo $key ." =>" . $value . "\n";
}?>

四、php的垃圾回收

4.1 GC(Garbage Collection)垃圾回收机制

GC可以找到内存中的垃圾、并释放和回收空间

4.2 php垃圾回收核心思想

在 PHP5.3 之前,PHP 的垃圾回收机制非常简单,就是把 refcount 为0的全部清理回收掉,在底层也就是 free 掉了

  1. 设置引用数,判断当前引用数是否为0
  2. 引用计数器
  3. 引用关系改变时修改引用数字
  4. 引用数字为0时立即回收
  • PHP5.3 后并不是直接看每个变量的 refcount 是否为0了
  • 使用的算法是深度遍历,有个根缓冲区,根据它来清理,具体算法需要比较扎实的 C 和算法基础
  • 5.3 之后和算法解决了循环引用的问题
  • 内存泄露值会保持在某一个范围,不会出现立即大范围崩溃的情况

五、flock

php多进程读写一个文件,用flock() 函数锁定或释放文件。

$file = fopen("test.txt","w+");    // 打开文件
// 排它性的锁定 先锁上,写完,解锁。
if (flock($file,LOCK_EX)){
    fwrite($file,"Write something");
    flock($file,LOCK_UN);    // 文件解锁
}else{
  echo "Error locking file!";
}
fclose($file);    // 关闭文件

六、set_error_handler

函数设置用户自定义的错误处理函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值