php function方法,PHP向Function添加方法

是否可以向函数添加方法?

例如:

function func(){

;

}

//add method

func->test = function(){

;

}

func->test();

func();

我来自javascript背景,因此我已经习惯了“一切都是对象”.

编辑:

我只是在解释新phper可能经常产生的误解.我了解上述代码无效.

编辑2

弄清楚了.

class myfunc_class{

function __invoke(){

//function body

}

function __call($closure, $args)

{

call_user_func_array($this->$closure, $args);

}

}

$func = new myfunc_class;

$func->test = function(){

echo '
test
';

};

$func->test();

$func();

更加性感:)

class func{

public $_function;

function __invoke(){

return call_user_func_array($this->_function,func_get_args());

}

function __construct($fun){

$this->_function = $fun;

}

function __call($closure, $args)

{

call_user_func_array($this->$closure, $args);

}

}

$func = new func(function($value){

echo $value;

});

$func->method = function(){

echo '
test
';

};

$func('someValue');

$func->method();

解决方法:

否,因为对象是与函数不同的PHP语言构造.函数没有属性,而只是执行指令.

但是,如果func是预定义的类,那么是的…有点巫术,忽略了公众的强烈抗议,前述的可读性和PHP编码标准,并在__call() magic method中使用了closures …

class func

{

function __call($func, $args)

{

return call_user_func_array($this->$func, $args);

}

}

$obj = new func;

$obj->test = function($param1, $param2)

{

return $param1 + $param2;

};

echo $obj->test(1,1);

如果没有__call(),这将无法正常工作,因为通过$obj-> test(1,1),PHP认为您超出对象范围时正在尝试调用不存在的func方法.但是在内部,由于新的“ test”属性是一种类型:闭包,因此call_user_func_array()只是将“ test”属性视为另一个函数,因此您可以从外部范围中隐藏这一点技巧.

标签:php,methods

来源: https://codeday.me/bug/20191102/1991886.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值