php tricks

547 查看

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