一、fastcgi_finish_request()
这个函数比较牛皮,可以在执行返回客户端后,继续执行操作。需要注意两点:
1、必须时通过fpm的方式来才能有效
2、数据客户端后本进程仍然在执行,并未退出
3、如果处理时间较长需要设置set_time_limit(0);
<?php
echo time();
if (function_exists("fastcgi_finish_request")){
fastcgi_finish_request();
sleep(1);
file_put_contents("log.txt", time()."\r\n",FILE_APPEND);
for ($i=0;$i < 10;$i++){
file_put_contents("log.txt", "$i\r\n",FILE_APPEND);
}
}
?>
二、ArrayObject()
一直很少用该函数,所以对其基本没有了解。该函数主要提供来通过数组和对象两种方式进行访问
数组方式访问
$obj = new ArrayObject(array(),ArrayObject::STD_PROP_LIST);
对象和数组方式同时访问
$obj = new ArrayObject(array(),ArrayObject::ARRAY_AS_PROPS);
同时该类中提供来offset等方式来进行访问。主要的实现了ArrayAccess
ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
三、父类与子类相互使用的问题
一直以来以为,子类继承父类,只能子类使用父类的方法,通过实践发现,父类也可以使用子类的方法,比如
<?php
abstract class A {
public function __construct() {
$this->params();
print_r($this->cu_debug_iccid_list);
}
protected function params(){
print_r("parent");
}
}
class B extends A {
public $cu_debug_iccid_list = 1;
public function __construct() {
parent::__construct();
}
protected function params() {
print_r("what a pity");
}
}
$b = new B();
?>
四、实例化对象作为参数传递
<?php
class A{
public $key = 1;
}
class B{
public function t($a){
$a->key = 2;
}
}
$_a = new A();
$_b = new B();
$_b->t($_a);
print_r($_a->key); // 2
?>
参考php手册看看吧 https://www.php.net/manual/zh/language.oop5.references.php
https://segmentfault.com/q/1010000010641993?_ea=2363326