1.函数并立即调用
php
call_user_func(function(){ echo "hello,world"; });
2.上下文变量
php
$context="hello,world"; call_user_func(function()use($context){ echo $context; });
3.use和$this
php
class A { public $t; public function __construct($t="hello,world"){ $this->t=$t; } function test(){ call_user_func(function(){ echo $this->t;//php5.4+ }); } } $a=new A(); $a->test(); class Hello { private $message = "Hello world\n"; public function createClosure() { return function() { echo $this->message; }; } } class Bye { private $message = "Bye world\n"; } $hello = new Hello(); $helloPrinter = $hello->createClosure(); $helloPrinter(); // outputs "Hello world" $bye = new Bye(); $byePrinter = $helloPrinter->bindTo($bye, $bye);//like javascript apply $byePrinter(); // outputs "Bye world" $CI = $this; $callback = function () use (&$CI) { $CI->public_method(); };
4.调用一切可调用的东西
php
class Contrller{ //调用具体的action, public function __act($action){ call_user_func( array($this,$action) ); //$this->{$action}() } } class HelloContrller extends Controller{ public function index(){ } public function hello(){ } public function dance(){ } }
5.装饰器
php
//装饰器 $dec=function($func) { $wrap=function ()use ($func) { echo "before calling you do sth\r\n"; $func(); echo "after calling you can do sth too\r\n "; }; return $wrap; }; //执行某功能的函数 $hello=function (){ echo "hello\r\n"; }; //装饰 $hello=$dec($hello); //在其他地方调用经过装饰的原函数 $hello(); /*output: before calling you do sth hello after calling you can do sth too */
6.object
php
$obj = new stdClass; $obj->a = 1; $obj->b = 2;
7.static
php
class father { public function __construct() { // $this->init(); static::init(); } private function init() { echo "father\n"; } } class son extends father { /*public function __construct() { $this->init(); }*/ public function init() { echo "son\n"; } } $son = new son(); son::init();//son
8.list explode
php
list( , $mid) = explode(';', 'aa;bb;cc'); echo $mid; //输出 bb
9.object array
php
$array = json_decode(json_encode($deeply_nested_object), true); //$array = (array) $yourObject; function object_to_array($data){ if (is_array($data) || is_object($data)) { $result = array(); foreach ($data as $key => $value) { $result[$key] = object_to_array($value); } return $result; } return $data; }
10.tree
php
function displayTree($array){ $newline = "<br>"; $output = ""; foreach($array as $key => $value) { if (is_array($value) || is_object($value)) { $value = "Array()" . $newline . "( <ul>" . $this->displayTree($value) . "</ul> )" . $newline; } $output .= "[$key] => " . $value . $newline; } return $output; }
11.交换变量list($a, $b) = array($b, $a);
来自
知乎
http://stackoverflow.com/questions/8391099/using-this-in-anonymous-fun...
http://stackoverflow.com/questions/4345554/convert-php-object-to-assoc...
https://www.quora.com/What-are-some-cool-PHP-tricks