Decorator函数

什么是 decorator函数?比如说,我想1.创建一个函数,2.运行过程中有某个函数把关,3.运行函数完成一定的功能;但作为函数的创建者和使用者,我并不希望运行函数时去关注把关者,而只关注函数本身;另外,把关者可能差别非常大。更进一步说,我们希望能用任意一个把关函数,去“装饰”任意另一个函数。

下面这个例子很好说明问题,testfunc函数只要关注自己即可, decorate做了什么事情(比方说可以直接改成是否要给予某个授权或放行),testfunc并没有直接参与。

<?php 

session_start();

 

$decorate =function($func) {

    return function() use ($func) { //加上这一句之后,$decorate返回就是一个函数,而不是值或空值。

        if ($_SESSION['is_decorated'] == true){

            $args = func_get_args($func);

            call_user_func_array($func, $args);

        }

        else {

            echo "Access Denied, decoratenot allowed!";

        }

    };

};

 

$testfunc =function($content) {

    echo "Testfunc get content:$content"."<br>";

};

 

$testfunc =$decorate($testfunc);

 

$_SESSION['is_decorated']= true;

 

$testfunc('test01is decorated');

 

$_SESSION['is_decorated']= false;

 

$testfunc('test02');

?>

运行上面的代码,你会得到下面的结果,

testfunc content: test01 is charged
Access Denied, decorate allowed!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值