首页->正文

PHP版本不同导致调用方法不存在

2011-05-15 -Web开发 标签: php

之前某类的方法中要对字符串进行特殊处理,使用到了preg_replace_callback中的callback参数,直接传递了类中的方法,演示代码如下:
<?php
//仅供演示用
class a{
    function c($s){
        return preg_replace_callback('/\d+/', 'self::_d', $s);
    }
    static function _d($m){
        return "a\n";
    }
}

$test = new a();
echo $test->c('123');

//EOF

本地测试完全正常,但放到另外一个环境运行提示:
PHP Fatal error:  Cannot call method self::_d() or method does not exist in F:\c.php on line 5


经过检查是PHP版本问题,本地为PHP 5.3.3,另外的一个是PHP 5.2.17,做以下修改
function c($s){
    return preg_replace_callback('/\d+/', 'a::_d', $s);
}

也就是把callback参数由调用本类自身方法的方式self::_d改为指定类下的方法a::_d(_d必须是类中的静态函数)。当然如果不考虑函数命名冲突问题的话,还可以直接把_d()方法直接写到类的外层,直接调用_d。
看来这种特殊的写法在使用时还得多注意下。

扩展阅读
更多5.3.x下注意的问题 http://www.php.net/manual/zh/migration53.php

下一篇 编写web服务器学Python之三

上一篇 mysql、nginx权限设置不当导致的两则问题

相关文章

Ubuntu下编译安装PHP

使用curl_multi_init并发请求

php增加Last-Modified为何无效

用xhprof分析php代码

正则修饰符m和s用法

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com