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

本文深入探讨了PHP中自动加载函数的注册与取消,以及如何使用匿名函数操作类的私有变量。通过具体代码示例,展示了spl_autoload_register和Closure::bind的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#注册:自动加载函数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私有无权访问

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值