博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP之func_*系列方法使用须知
阅读量:7226 次
发布时间:2019-06-29

本文共 1188 字,大约阅读时间需要 3 分钟。

摘要:

  众所周知,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做了什么改进?

转载于:https://www.cnblogs.com/xiaoyaoxia/archive/2012/02/08/2342582.html

你可能感兴趣的文章
Python练习实例100例(持续更新中)
查看>>
非父组件通信
查看>>
Electron系列文章-主进程与渲染进程
查看>>
高性能缓存服务器 nuster v1.8.8.2 和 v1.7.11.2 发布
查看>>
教你快速入门ES6
查看>>
Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
查看>>
宜昌a货翡翠,包头a货翡翠
查看>>
【微信事业群】趣味面试算法题
查看>>
保守的国美再一次进击社交电商,前途未卜?
查看>>
git
查看>>
Python学习教程(Python学习路线):Python 3—手动创建迭代器
查看>>
说说如何在 Virtual Box 中新建 CentOS 虚拟机
查看>>
Cordova + Vue 实现点击两次退出应用
查看>>
JAVA 多用户商城系统b2b2c-Spring Cloud Stream 介绍
查看>>
spring cloud构建互联网分布式微服务云平台-SpringCloud集成项目简介
查看>>
基于房源的画像分析
查看>>
80% UI 初学者走过的弯路,你走了几条?
查看>>
文档和元素的几何滚动
查看>>
php 设计模式
查看>>
Java springcloud B2B2C o2o多用户商城 springcloud架构(八)springboot整合mongodb
查看>>