PHP的回调函数

回调函数就是以函数作为参数,这样允许了底层调用高层设计的函数。

<?php
//回调函数
        class product{
                public $name;
                public $price;

                function __construct($name,$price){
                        $this->name = $name;
                        $this->price = $price;
                }
        }        
        class Saler{
                private $callbacks;

                function registerCallback($callback){
                        if(! is_callable($callback)){
                                throw new Exception("callback not callable");
                        }
                        $this->callbacks[] = $callback;
                }

                function sale($product){
                        print "{$product->name}:processing\n";
                        foreach($this->callbacks as $callback){
                                call_user_func($callback,$product);
                        }
                }
        }
        $logger = create_function('$product','print "  logging({$product->name})\n";' );

        $logprice = create_function('$product','print " logging({$product->price})\n";');
        $saler = new saler();
        $saler->registerCallback($logger);
        $saler->registerCallback($logprice);

        $saler->sale(new product("shoes",6));
        print "\n";

        $saler->sale(new product("coffee",23));
?>


回调不一定是匿名的,比如:

function logger($product)

{

print "logging({$product->price})";

}

$saler->registerCallback("logger");

//回调函数也可以是对象的方法

        class customer{
                function consume($product){
                        print "consume({$product->name})\n";
                }
        }

$saler->registerCallback(array(new customer(),"consume"));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值