>  기사  >  백엔드 개발  >  php tricks

php tricks

WBOY
WBOY원래의
2016-06-20 12:54:201385검색

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 sthhelloafter calling you can do sth too*/ 

6.object

php$obj = new stdClass;$obj->a = 1;$obj->b = 2;

7.static

php<br />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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.