php录像,PHP实用小技巧之调用录像的方法

搜索热词

主要功能

把你实际的调用操作录下来,然后在你想要的地方重新调用

和匿名函数的作用基本一样,暂存你的调用操作 一般用于链式调用,然后实际作用于你想要操作的对象上面

好像和没说一样

使用场景

假如 laravel 项目用到了 仓库模式, 然后对于比较复杂的查询条件,一般情况下有三种操作

定一个规则,按照这个规则组装数组,然后需要在 仓库类 里面实现解析

传匿名函数,匿名函数里面写查询条件

现在可以对第三种方法进行优化,传入一个下面代码里的 CallEcho 对象

//控制器里

$callEcho = (new CallEcho())->where("username","马云")->where("is_boss",1)->first();

$fubao = (new UserRepository)->first($callEcho);

//仓库类

class UserRepository{

public function first(CallEcho $callEcho){

return $callEcho->invoke(new User());

}

}

看着和匿名函数差不多,但是 CallEcho 可以被继承来实现些接口,继承后还可以对查询条件进行一些操作,比如过滤什么的。用匿名函数的话,完全就看调用方的良心了。

最重要的是不传对象传函数叫什么面对对象

class CallEcho

{

protected $callable = null;

public function __construct()

{

//callable 初始化

$this->seed();

}

protected function seed(){

$this->callable = $this;

}

public function __invoke($obj)

{

return $obj;

}

public function __call($name,$arguments)

{

$current = $this->callable;

/**

* 每产生__call,就往callable上面裹一层

*/

$this->callable = function($obj) use($name,$arguments,$current){

return call_user_func_array($current,[$obj])->{$name}(...$arguments);

};

return $this;

}

//作用于真正的对象上面

public function invoke($obj){

return call_user_func_array($this->callable,[$obj]);

}

}

简单的测试 以及 使用

class TestCallEcho{

protected $called = [];

public function __call($name,$arguments)

{

$this->called[] = [$name,$arguments];

return $this;

}

public function end(){

$this->called[] = "end";

return $this;

}

public function getCalled(){

return $this->called;

}

}

function testArrayEq($array1,$array2){

if(count($array1) !== count($array2)){

return false;

}

foreach ($array1 as $index => $value1){

if(!isset($array2[$index])){

return false;

}

$value2 = $array2[$index];

if(is_array($value1) && is_array($value2)){

if(!testArrayEq($value1,$value2)){

return false;

}else{

//继续判断

}

}else{

if($value1 !== $value2){

return false;

}

}

}

return true;

}

function testTestArrayEq(){

$array1 = [1,2];

$array2 = [1,3];

$array3 = [1,2,3];

assert(testArrayEq($array1,$array2) == false);

assert(testArrayEq($array1,$array3) == false);

assert(testArrayEq($array1,$array1) == true);

}

testTestArrayEq();

$obj = new \stdClass();

$callEcho = new CallEcho();

/*************重点开始****************/

/** @var CallEcho $callEcho */

$callEcho = $callEcho->testNumber(1)->testString("myname")->testObj($obj)->testMulti(1,"myname")->testMulti2("1",$obj)->end();

/** @var TestCallEcho $testCallEcho */

$testCallEcho = $callEcho->invoke(new TestCallEcho());

/************重点结束****************/

//基本上和这个作用一样

$a = function($obj){

$obj->testNumber(1)->testString("myname")->testObj($obj)->testMulti(1,$obj)->end();

};

$called = $testCallEcho->getCalled();

$eq = testArrayEq($called,[

["testNumber",[1]],["testString",["myname"]],["testObj",[$obj]],["testMulti",[1,"myname"]],["testMulti2",["1",$obj]],"end"

]);

assert($eq);

PS

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

总结

以上是编程之家为你收集整理的PHP实用小技巧之调用录像的方法全部内容,希望文章能够帮你解决PHP实用小技巧之调用录像的方法所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值