回複內容:
自從PHP玩閉包後,大家一口氣跳五樓,不費勁。
1、基礎:
一句話實現定義一個函數並立即調用
大家在JavaScript裡經常這麼搞,因為變數汙染是個不可容忍的事兒。但是PHP裡如何?這樣的功能?一個可行方法是:
call_user_func(function(){ echo "hello,world";});
@陳乏 還有一個解決辦法的哈。
class A{ protected function pro() { return "pro"; } public function pub() { return "pub"; }}$a = new A();$ext = function () { var_dump($this); // var_dump($this->pro()); //Error: Call to protected method A::pro() var_dump($this->pub());};$ext = $ext->bindTo($a);var_dump($ext());
$b=3;switch(1){ case $b==3: echo "fuck"; break;}?>
function callback($callback) { $callback(); } $obj = (object) "php aaa"; $callback = function () use ($obj) { print "This is a closure use object, msg is: {$obj->scalar}.
"; }; $obj->scalar = "php bbb"; //$obj = (object) "php bbb"; callback($callback);
C語言有趨向於運算子 -->,這個 PHP 也有,就不說了。
補充一個:在 PHP 原始碼中可以直接輸入網址,不需要注釋(黑魔法):
http://www.zhihu.com?>
奇技淫巧這個咋說呢, 玩玩還可以, 可千萬別在實際項目中用, 貢獻倆個吧:
交換倆個值:
list($b, $a) = array($a, $b);
$a = array($b, $b = $a)[0];當然是神奇的BOM頭啦,不知道搞的多少PHP初學者睡不好覺Quora 的列表
What are some cool PHP tricks?
XML字串轉數組
$xmlObj = simplexml_load_string($xmlStr);$xmlArr = json_decode(json_encode($xmlObj) , true);
1. stdClass();
$obj = new stdClass;$obj->a = 1;$obj->b = 2;