设为首页 收藏本站
查看: 403|回复: 0

[经验分享] 动态创建php 类函数或函数

[复制链接]

尚未签到

发表于 2017-4-1 12:21:31 | 显示全部楼层 |阅读模式
  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-358712-1-1.html 上篇帖子: Php Xml解析之DOMDocument使用方法 下篇帖子: 再谈PHP中的str_repeat函数实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表