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

【问题】

在折腾

过程中,需要调试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.参考:

确认了自己此处:

(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的问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值