最新消息:20190717 VPS服务器:Vultr新加坡,WordPress主题:大前端D8,统一介绍入口:关于

【已解决】wordpress中,调用自定义的函数时出现错误:PHP Fatal error: Call to undefined function xxx() in yyy.php

PHP crifan 1054浏览 0评论

【问题】

在折腾

实现WLW上传图片到Wordpress过程中,自动翻译文件名

过程中,需要调试php代码,但是后来遇到错误:

[26-Oct-2012 07:08:45] PHP Fatal error:  Call to undefined function translate_sanitize_file_name() in xxx\wp-includes\class-wp-xmlrpc-server.php on line 4562

相关的代码如下:

    function translate_sanitize_file_name($orig_file_name) {
        $new_file_name = $orig_file_name;
        ...
        return $new_file_name;
    }
    
	function mw_newMediaObject($args) {
        ...
        $name = translate_sanitize_file_name( $data['name'] );
        ...
    }

【解决过程】

1.参考:

Fatal error: Call to undefined function

确认了自己此处:

(1)已经声明(定义和实现)了该函数

(2)没有笔误,声明和调用的函数名都是translate_sanitize_file_name

(3)确定不是因为php版本不匹配导致的,因为此处是自定义的函数,所以根本不存在此问题

(4)不是跨文件调用

(5)更不存在跨文件调用且函数调用在定义之前的问题

 

所以,上述的问题,都不存在。

2.网上也看到一堆的解释,多数都是调用某个和系统有关的,比如sql数据库等,结果是由于没有载入相关的库文件而导致没有此函数供调用。

我这里,也不存在此问题。

3.后来还是通过自己的折腾,找到了原因。

原来是,此处完整的代码架构为:

class wp_xmlrpc_server extends IXR_Server {
...

    function translate_sanitize_file_name($orig_file_name) {
        $new_file_name = $orig_file_name;
        ...
        return $new_file_name;
    }
    
	function mw_newMediaObject($args) {
        ...
        //$name = sanitize_file_name( $data['name'] );
        $name = translate_sanitize_file_name( $data['name'] );
        ...
    }

而人家原先的函数sanitize_file_name可以调用,而我此处自己写的函数translate_sanitize_file_name不能调用的原因是:

sanitize_file_name是wordpress系统函数,所以可以直接调用。

而我自己写的函数translate_sanitize_file_name,虽然函数都是正确的声明和实现。

但是由于此处是在class范围内,类定义的地方,所以需要调用自己的类内的函数,需要使用$this去引用。

参考别人代码,去改为:

class wp_xmlrpc_server extends IXR_Server {
...

    function translate_sanitize_file_name($orig_file_name) {
        $new_file_name = $orig_file_name;
        ...
        return $new_file_name;
    }
    
	function mw_newMediaObject($args) {
        ...
        //$name = sanitize_file_name( $data['name'] );
        $name = $this->translate_sanitize_file_name( $data['name'] );
        ...
    }

就可以正常运行了。

【总结】

php中,如果是class定义内的函数互相调用,则记得不要漏了$this->,否则就会出现我这里的PHP Fatal error: Call to undefined的问题了。

转载请注明:在路上 » 【已解决】wordpress中,调用自定义的函数时出现错误:PHP Fatal error: Call to undefined function xxx() in yyy.php

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
65 queries in 0.131 seconds, using 18.88MB memory