插件中对未定义函数的调用错误

时间:2016-02-22 作者:j8d

我在一个类中编写了一个函数,该类从IP地址获取用户的国家/地区。。。

function getcountry() {
    if (!class_exists(\'GeoIP\')) {
    include_once("geoip.inc");
    }

    if (empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        $ip_address = $_SERVER["REMOTE_ADDR"];
    } else {
        $ip_address = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }

    $GeoIPv4_file = plugin_dir_path( __FILE__ ) . \'data/GeoIPv4.dat\';
    $GeoIPv6_file = plugin_dir_path( __FILE__ ) . \'data/GeoIPv6.dat\';

    if (!filter_var($ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE) {     
        if ( is_readable ( $GeoIPv4_file ) ) 
        $gi = \\LSMIGeoIP\\geoip_open( $GeoIPv4_file, GEOIP_STANDARD );
        $user_country = \\LSMIGeoIP\\geoip_country_code_by_addr($gi, $ip_address);
        \\LSMIGeoIP\\geoip_close($gi);
    } elseif (!filter_var($ip_address, FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) === FALSE) {
        if ( is_readable ( $GeoIPv6_file ) )
        $gi = \\LSMIGeoIP\\geoip_open( $GeoIPv6_file, GEOIP_STANDARD );
        $user_country = \\LSMIGeoIP\\geoip_country_code_by_addr($gi, $ip_address);
        \\LSMIGeoIP\\geoip_close($gi);
    } else {
        $user_country = "Can\'t locate IP: " . $ip_address;              
    }       
    return $user_country;
}
但是在另一个函数中调用该函数。。。

function set_visibility( $items, $menu, $args ) {
    $user_country = getcountry();
...
返回错误:Call to undefined function getcountry()

如果我将代码放在函数中,并将其放在另一个函数中,它将成功检索用户的国家/地区。

我的noob错在哪里?

1 个回复
最合适的回答,由SO网友:Vasim Shaikh 整理而成

出现此类错误时,可以尝试以下操作:

搜索包含函数定义的php文件。已验证文件是否存在。

已验证页面中是否存在上述文件的require(或include)语句。此外,请验证“要求/包括”中的绝对路径是否正确。

验证了Requirementation中的文件名拼写是否正确。

  • 回显了包含文件中的一个单词,以查看它是否被正确包含。

    在文件末尾定义了一个单独的函数,并调用了它。它也起作用了。

  • Problem :

    <您的函数可能位于不同的命名空间中,而不是从中调用它Solution :

    $this->引用属于类且在类内声明的函数,同样的事情也适用于在类内声明的变量。类内部称为$this->function(),如果类外部为public,则称为$theclass->function()