Dynamically create php class functions or functions

巴扎黑
Release: 2016-11-29 11:07:25
Original
1639 people have browsed it

1. Basic

Variable function:

<?php  
$func = &#39;test&#39;;  
  
function test(){  
    echo &#39;yes !&#39;;  
}  
  
$func();  
?>
Copy after login

Random function:

<?php  
$newfunc = create_function(&#39;$a,$b&#39;, &#39;return $a.$b;&#39;);  
echo "New anonymous function: $newfunc<br>";  
echo $newfunc(&#39;just&#39;, &#39;coding&#39;);  
?>
Copy after login

create_function — Create an anonymous (lambda-style) function

Create an anonymous function. This function is mainly used in the callback functions of unsort and array_walk

$a, $b are parameters, 'return $a,$b' is the code of the function

Callback function:

<?php     
//5.3 以前     
$array = array( &#39;asbc&#39;, &#39;ddd&#39;, &#39;tttt&#39;, &#39;qqq&#39;);     
array_walk($array,create_function(&#39;&$item&#39;,&#39;$item=strtoupper($item);&#39;) ); //function(&$itm){$itm = strtoupper($itm);}     
print_r($array);  
  
//5.3 以后     
$array = array( &#39;asbc&#39;, &#39;ddd&#39;, &#39;tttt&#39;, &#39;qqq&#39;);     
array_walk($array,function(&$itm){$itm = strtoupper($itm);});      
print_r($array);  
?>
Copy after login

array_walk(array, function, userdata ...)

array_walk() function applies a callback function to each element in the array. Returns TRUE if successful, FALSE otherwise.

Typically function accepts two parameters. The value of the array parameter is used as the first one, and the key name is used as the second one. If the optional parameter userdata is provided, it will be passed to the callback function as the third parameter.

2. Instance dynamic creation of class functions

<?php  
/* create class */  
class Record {  
    
    /* record information will be held in here */  
    private $info;  
    
    /* constructor */  
    function Record($record_array) {  
        $record_array[&#39;body&#39;] = &#39;this is a new attribution&#39;;  
        $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(&#39;$c&#39;, &#39;return "_" . strtolower($c[1]);&#39;); // function ($c) { return "_" . strtolower($c[1]); }  
        return preg_replace_callback(&#39;/([A-Z])/&#39;, $func, $str);  
    }    
}  
  
  
/* usage */  
$Record = new Record(  
    array(  
        &#39;id&#39; => 12,  
        &#39;title&#39; => &#39;Greatest Hits&#39;,  
        &#39;description&#39; => &#39;The greatest hits from the best band in the world!&#39;  
    )  
);  
  
/* proof it works! */  
echo &#39;The ID is:  &#39;.$Record->getId().&#39;<br>&#39;; // returns 12    
echo &#39;The Title is:  &#39;.$Record->getTitle().&#39;<br>&#39;; // returns "Greatest Hits"  
echo &#39;The Description is:  &#39;.$Record->getDescription().&#39;<br>&#39;; //returns "The greatest hits from the best band in the world!"  
echo &#39;The Body is:  &#39;.$Record->getBody(); //returns "The greatest hits from the best band in the world!"  
?>
Copy after login

The key points are: __call and create_function


Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template