php判断是不是匿名函数

<?php
class di{
function set($name,$value)
{
$this->_set[$name] = $value;
if(is_string($value))
$this->_type[$name] = 's';
else if(is_object($value))
if(is_callable($value)) //匿名函数类型是对象而且能够调用
   $this->_type[$name] = 'f';
else
                $this->_type[$name] = 'o';
else if(is_array($value))
            $this->_type[$name] = 'a';
else
$this->_type[$name] = 'f';
}
function pt()
{
print_r($this->_set);
print_r($this->_type);
}

function get($name)
{
return $this->_set[$name];
}
}
class db{
function getDb(){
return 'mysql';
}
}
$di = new di();
$di->set('test',function(){
echo $a='hello';
});
$di->set('db',new db());
$di->pt();
$b = $di->get('test');
$b(); 

php 5.4新功能
class bar {}
function  foo(bar $foo) { }  //参数必须是bar类的实例,不然报错
function  foo( array  $foo) {}   //参数必须是数组

function foo(callable $callback) {
$callback('good');
}
//foo("false"); //错误,由于false不是callable类型

foo("printf"); //正确

foo(function($a){echo 'niming:'.$a;}); //正确
class A{
static function show($a){
   echo 'method'.$a;
}
}
foo(array("A", "show")); //正确 
相关文章
相关标签/搜索