php动态创建函数实例学习

发布时间:2019-09-08编辑:脚本学堂
介绍一个php动态创建函数的例子,包括普通函数与类函数,有需要的朋友,可以参考下。

一、创建普通函数
1)、变量函数:
 

复制代码 代码示例:
<?php 
    $func = 'test'; 
     
    function test(){ 
        echo 'yes !'; 
    } 
     
    $func(); 
?> 
 

2)、随机函数:
 

复制代码 代码示例:
<?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' 为函数的代码
3)、回调函数 :
 

复制代码 代码示例:
<?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 ,将被作为第三个参数传递给回调函数。

二、动态创建类函数
 

复制代码 代码示例:

<?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); 
        }   
    }  //by http://www.jb200.com

    /* 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 。