php 函数绑定参数??

类比 js Function 对象的 bind 的方法

var name = 'ys';

var getHeightFunc = getHeight.bind(null , name);

var info = combineInfo(name , getHeightFunc);


console.log(name + ' 的信息:' , info);


function getHeight(name){

    var person = {

        'cxl' => 167 ,

        'ys'  => 165

    };

    var k;

    

    for (k in person)

        {

            if (k === name) {

                return person[k];

            }

        }

    

    return false;

}


function combineInfo(name , getHeightFunc){

    var name   = typeof name !== 'string' ? '未定义名称' : name;

    var height = getHeightFunc();

    

    return {

        name: name , 

        height: height

    };

}

PHP 函数如何实现上面的这种效果??

慕尼黑的夜晚无繁华
浏览 575回答 1
1回答

慕工程0101907

js的bind有两个部分,绑定this和绑定参数。绑定this在php里可以用Closure::bind,绑定参数要通过匿名函数(闭包)和反射实现。先看直接用实现:<?phpfunction&nbsp;getHeight($name){ &nbsp;&nbsp;&nbsp;&nbsp;$person&nbsp;=&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'cx1'&nbsp;=>&nbsp;167,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ys'&nbsp;&nbsp;=>&nbsp;165 &nbsp;&nbsp;&nbsp;&nbsp;];&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$person[$name]&nbsp;??&nbsp;false; }function&nbsp;bind(Callable&nbsp;$func,&nbsp;$arg1){&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function()&nbsp;use&nbsp;($func,&nbsp;$arg1)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$func($arg1); &nbsp;&nbsp;&nbsp;&nbsp;}; } $getHeightFunc&nbsp;=&nbsp;bind('getHeight',&nbsp;'cx1'); $height&nbsp;=&nbsp;$getHeightFunc();上面的bind函数只能绑定一个参数,要绑定多个参数:function&nbsp;bind(Callable&nbsp;$func){ &nbsp;&nbsp;&nbsp;&nbsp;$args&nbsp;=&nbsp;func_get_args(); &nbsp;&nbsp;&nbsp;&nbsp;array_shift($args);&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function()&nbsp;use&nbsp;($func,&nbsp;$args)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;call_user_func_array($func,&nbsp;array_merge($args,&nbsp;func_get_args())); &nbsp;&nbsp;&nbsp;&nbsp;}; }function&nbsp;add($x,&nbsp;$y)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$x&nbsp;+&nbsp;$y; } $add0&nbsp;=&nbsp;bind('add'); var_dump($add0(1,&nbsp;2)); $add1&nbsp;=&nbsp;bind('add',&nbsp;1); var_dump($add1(2)); $add12&nbsp;=&nbsp;bind('add',&nbsp;1,&nbsp;2); var_dump($add12());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript