動態建立php 類函數或函數

來源:互聯網
上載者:User
1. 基礎

變數函數:

<?php  $func = 'test';    function test(){      echo 'yes !';  }    $func();  ?>

隨機函數:

<?php  $newfunc = create_function('$a,$b', 'return $a.$b;');  echo "New anonymous function: $newfunc<br>";  echo $newfunc('just', 'coding');  ?>

create_function — Create an anonymous (lambda-style) function

建立一個匿名函數。這個函數主要作用在unsort和array_walk的回呼函數

$a,$b為參數,'return $a,$b' 為函數的代碼

回呼函數 :

<?php     //5.3 以前     $array = array( 'asbc', 'ddd', 'tttt', 'qqq');     array_walk($array,create_function('&$item','$item=strtoupper($item);') ); //function(&$itm){$itm = strtoupper($itm);}     print_r($array);    //5.3 以後     $array = array( 'asbc', 'ddd', 'tttt', 'qqq');     array_walk($array,function(&$itm){$itm = strtoupper($itm);});      print_r($array);  ?>

array_walk(array,function,userdata...)

array_walk() 函數對數組中的每個元素應用回呼函數。如果成功則返回 TRUE,否則返回 FALSE。

典型情況下 function 接受兩個參數。array 參數的值作為第一個,鍵名作為第二個。如果提供了選擇性參數 userdata ,將被作為第三個參數傳遞給回呼函數。

2. 執行個體動態建立類函數

<?php  /* create class */  class Record {          /* record information will be held in here */      private $info;          /* constructor */      function Record($record_array) {          $record_array['body'] = 'this is a new attribution';          $this->info = $record_array;      }          /* dynamic function server */      function __call($method,$arguments) {          $meth = $this->from_case(substr($method,3,strlen($method)-3));          return array_key_exists($meth,$this->info) ? $this->info[$meth] : false;      }          function from_case($str) {          $str[0] = strtolower($str[0]);          $func = create_function('$c', 'return "_" . strtolower($c[1]);'); // function ($c) { return "_" . strtolower($c[1]); }          return preg_replace_callback('/([A-Z])/', $func, $str);      }    }      /* usage */  $Record = new Record(      array(          'id' => 12,          'title' => 'Greatest Hits',          'description' => 'The greatest hits from the best band in the world!'      )  );    /* proof it works! */  echo 'The ID is:  '.$Record->getId().'<br>'; // returns 12    echo 'The Title is:  '.$Record->getTitle().'<br>'; // returns "Greatest Hits"  echo 'The Description is:  '.$Record->getDescription().'<br>'; //returns "The greatest hits from the best band in the world!"  echo 'The Body is:  '.$Record->getBody(); //returns "The greatest hits from the best band in the world!"  ?>

重點在於: __call 和 create_function

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.