php匿名関数(閉パッケージ)
2188 ワード
匿名関数は、関数を動的に作成し、変数に保存するために使用できます.栗を挙げます.
同等:
あまり珍しいところがないように見えますが、焦らないで、見続けてください.
operate関数により,異なる関数を生成して結果として返すことができ,この結果を直接関数として呼び出すことができ,上のコードはそれぞれ減算演算と加算演算関数を動的に作成した.
実戦で使用されるテクニックを示します.
コードにはDiコンテナがあり、オブジェクトインスタンスを保存し、set()メソッドでサービスを登録し、get()メソッドでサービスを取得します.$di->set()を見たとき、匿名関数を使用し、zhangsanとlisiの2つのサービスを事前に登録しました.この2つのサービスはUserクラスのインスタンスであり、$di->setの場合は実際にはインスタンス化されていませんが、$di->get()の場合に匿名関数を実行してオブジェクトを返します.これにより、オンデマンドインスタンス化が実現され、インスタンス化されずに効率が向上します.
閉包特性:jsをよく書く学生はjsの閉包特性を知っているはずです.簡単に言えば、一つの関数で子関数を定義することができます.親関数の変数は子関数で直接使用することができますが、PHPの閉包はどう使いますか.少し違いがあります.
外層変数を内層匿名関数に伝達したい場合はuse(変数)を使用します.閉パッケージの用途は多くの場所で使用でき、DIモードでよく見られる.
$func = function(){
exit('Hello world!!');
};// ;
$func();
同等:
function func(){
exit('Hello world!!');
}
func();
あまり珍しいところがないように見えますが、焦らないで、見続けてください.
function operate($operator){
if($operator == "-"){
return function($a,$b){
return $a-$b;
};
}else{
return function($a,$b){
return $a+$b;
};
}
}
$subtraction = operate("-");
echo $subtraction(4,3);//1
$addition = operate("+");
echo $addition(1,2);//3
operate関数により,異なる関数を生成して結果として返すことができ,この結果を直接関数として呼び出すことができ,上のコードはそれぞれ減算演算と加算演算関数を動的に作成した.
実戦で使用されるテクニックを示します.
_factory[$id] = $value;
}
public function get($id){
$value = $this->_factory[$id];
return $value();
}
}
class User{
private $_username;
function __construct($username="") {
$this->_username = $username;
}
function getUserName(){
return $this->_username;
}
}
//
$di = new Di();
$di->set("zhangsan",function(){
return new User(' ');
});
$di->set("lisi",function(){
return new User(" ");
});
echo $di->get("zhangsan")->getUserName();
echo $di->get("lisi")->getUserName();
コードにはDiコンテナがあり、オブジェクトインスタンスを保存し、set()メソッドでサービスを登録し、get()メソッドでサービスを取得します.$di->set()を見たとき、匿名関数を使用し、zhangsanとlisiの2つのサービスを事前に登録しました.この2つのサービスはUserクラスのインスタンスであり、$di->setの場合は実際にはインスタンス化されていませんが、$di->get()の場合に匿名関数を実行してオブジェクトを返します.これにより、オンデマンドインスタンス化が実現され、インスタンス化されずに効率が向上します.
閉包特性:jsをよく書く学生はjsの閉包特性を知っているはずです.簡単に言えば、一つの関数で子関数を定義することができます.親関数の変数は子関数で直接使用することができますが、PHPの閉包はどう使いますか.少し違いがあります.
function func1($a){
return function() use ($a){
echo $a;
};
}
$a = func1("a");
$a();// a
外層変数を内層匿名関数に伝達したい場合はuse(変数)を使用します.閉パッケージの用途は多くの場所で使用でき、DIモードでよく見られる.