您的位置 首页 php

我们身边的现代PHP(四)

附加状态

如何为PHP闭包附加并封装状态,在PHP中,必须手动调用闭包对象的bindTo()方法或者使用use关键字,把状态附加到PHP闭包上。使用use关键字附加闭包状态的频率较高,直接看一个代码吧

 <?php

function sayName($name) {
    return function ($address) use($name) {
        return "hello " . $name . " welcome to " . $address;
    };
}

$say = sayName("Orion");

echo $say('china');  

结果是:hello Orion welcome to china

如果是多个参数怎么办?

use可以把多个参数传入闭包,就和PHP函数或者方法的参数一样,使用,分割多个参数

在上一篇文章中,提到过,PHP闭包是对象, 那么$this能不能用? 答案是肯定能用,下面我们就来看看bindTo()这个方法。

bindTo()方法为闭包增加了一些有趣的潜力,我们可以使用这个方法吧Closure对象的内部状态绑定到其他对象上。bindTo()方法的第二个参数很重要,其作用是指定绑定闭包的那个对象属于的PHP类,因此, 闭包可以访问绑定闭包的对象中受保护和私有的成员变量 。下面看代码:

 <?php

class App
{
    // 路由
    protected $routes = [];

    protected $str = "test";


    public function addRoute($routePath, Closure $routeCallback)
    {
        // 路由的路径通过回调绑定
        $this->routes[$routePath] = $routeCallback->bindTo($this, __CLASS__);
    }


    public function dispatch($currentPath)
    {
        foreach ($this->routes as $routePath => $callback) {
            if ($routePath === $currentPath) {
                $callback();
            }
        }

        echo $this->str;
    }

}

$app = new App();

$app->addRoute('/test', function () {

    // 这里直接可以给受保护的str 赋值
    $this->str = "this is test";

});


$app->dispatch('/test');  

输出结果是:this is test

这就是使用bindTo()方法绑定App这个class,匹配到路由后触发对应的回调函数,很好理解吧,其实很多框架都使用到这个特性。

Zend OPcache

字节码缓存不是PHP都新特性,有很多独立的扩展可以实现缓存,如APC Xcache等。这些扩展都是需要安装,不过从PHP5.5.0开始,PHP内置了字节码缓存功能,这就是 Zend OPcache。

众所周知,PHP是解释型语言,PHP解释器执行PHP脚本时会解析PHP脚本代码,编译成一系列的Zend操作码,然后执行字节码,每次请求都会解析,编译,执行PHP脚本,消耗资源,如果预先缓存编译好的字节码,就少了2个步骤,不用解析和编译了,直接执行,可以有效提高响应时间,降低系统资源,这和JAVA直接编译好以后,JVM直接执行编译好的class有点类似,不过这里是从缓存里面执行。

一般很少人会去关心Zend OPcache,因为提高性能,单单从一个opcache是无法解决根本的,因为很多耗时的地方,并非代码运行,而是在数据库,IO读写,API接口,RPC服务调用,网络流量等等方面影响 ,但是有总比没有好,对吧,在下节继续讲解Zend OPcache如何开启,如何配置,需要注意的地方,还会讲到PHP内置的HTTP服务器。

后续会继续更新,感兴趣的小伙伴可以收藏下哟!

欢迎有问题或者项目开发有问题的小伙伴(妹子优先)添加微信:wxmm686800,共同成长!不好意思可以邮箱联系:lirui310@aliyun.com

文章来源:智云一二三科技

文章标题:我们身边的现代PHP(四)

文章地址:https://www.zhihuclub.com/151451.shtml

关于作者: 智云科技

热门文章

网站地图