【Laravel】PHP框架内部使用的那些巧妙模式【一】

#注册:自动加载函数Class::function

spl_autoload_register(array('class', 'function'), true, true);

 

#取消注册:自动加载函数Class::function

spl_autoload_unregister(array('class','function'));

 

# 回调函数call_user_func('function','param1','param2',....);

echo "结果:";
call_user_func(function($a,$b,$c){
    echo $a;
    echo $b;
    echo $c;
},'a','b','c');

=> 结果:abc

 

 #解释:\Closure::bind('匿名函数','所属实例对象[匿名函数内部的$this]','作用域[就是该函数在类内部]') 

class B{
    private $v = 0;     #私有变量
}

//------------------------------------
#匿名函数
$func = function(){
    $this->v = 1;        #操作私有变量
};

$mB = new B();
\Closure::bind($func,$mB,B::class)();  


 

 #返回:匿名函数,调用方式

\Closure::bind()();
call_user_func(\Closure::bind());

 

  #解释:实例对象能在类内部修改私有变量

class B{
    private $v = 0;
    
    public function set($mB){
        $mB->v = 1;
    }
}
$mB = new B();
$mB->set($mB);

print_r($mB);#这里是能修改v的

 

#解释:\Closure::bind('匿名函数',null,'作用域[就是该函数在类内部]')

class A{

}

class B{
    private $v = 0;     #私有变量
}

//------------------------------------
//实例对象
$mB = new B();

#匿名函数
$func = function()use($mB){
    //$this->v = 1;        #由于'所属实例对象'为 null $this将不能用
    $mB->v = 1;          #这里$mB就相当于在B内部操作变量  
};

\Closure::bind($func,null,B::class)();
  #-------------------------------------------------------------------------
  \Closure::bind($func,null,A::class)();  #这里就会报错,说B::$v私有无权访问

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页