于一 发表于 2017-4-1 12:21:31

动态创建php 类函数或函数

  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 = strtolower($str);
$func = create_function('$c', 'return "_" . strtolower($c);'); // function ($c) { return "_" . strtolower($c); }
return preg_replace_callback('/()/', $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
页: [1]
查看完整版本: 动态创建php 类函数或函数