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

[经验分享] PHP之func_*系列方法使用须知

[复制链接]

尚未签到

发表于 2015-8-25 09:46:01 | 显示全部楼层 |阅读模式
摘要:
  众所周知,PHP是一门服务器端脚本语言,也是一门弱语言,所谓弱语言就是说在你使用它的时候,它对你的变量类型不敏感,你可以在使用的时候再确定它是什么类型而非定义它的时候,同时PHP中,声明一个函数,如果你不确定他可以接收多少个参数,那么你可以在方法体中,用func_*系列函数(func_get_args/func_get_arg/func_num_args)来获取运行中的参数列表及参数信息,本文主要是记录下用func_*系列方法的时候发生的一件尴尬事件。



一、故事背景

在一个类中的一个方法中,我有如下方法:




class test {
    public function displayTemplate() {
        Hook::template('test', func_get_arg(0));
    }
}
       该方法在本地运行一切OK ,正常的产生预期效果。然后诡异的事情出现在将该代码上传到服务器上之后,竟然发现在Hook::template这里就搁浅了,在这个调用之前的所有调试都能正常输出,然后在Hook::template该方法里面的任何调试都没有输出。让同事来帮忙看也一头雾水。



二、阴错阳差的调试出现曙光

某一时刻,我们在调试的时候,将以上代码改成了这样:




class test {
    public function displayTemplate() {
        Hook::template('test');
    }
}
结果发现,竟然跑通了,然后才查了服务器版本5.2.13,而我们的本地版本都是5.3.8,于是就猜想问题出在版本上。



三、恍然大悟

后来查了PHP 5.3的更新记录(或是直接php.net搜索func_get_arg),看到如下一句话:

5.3.0 This function can now be used in parameter lists.

而同类方法下func_get_args/func_get_arg/func_num_args都有如上提示。

原来可直接作为参数列表中的参数来使用,是从5.3.0开始的,所以5.3.X以下就不能这么用,于是我们将如上代码改成如下:




class test{
    public function displayTemplate() {
        $arg = func_get_arg(0);
        Hook::template('test', $arg);
    }
}

四、大胆假设
虽然没有研究过PHP的解析引擎,但是这个情况应该是和这个有关系吧,PHP5.3.0做了什么改进?

运维网声明 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-103891-1-1.html 上篇帖子: 黄聪:解决PHP生成校验码时“图像因其本身有错无法显示”的错误 下篇帖子: php无限遍历目录-修正版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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