我在一个类中编写了一个函数,该类从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错在哪里?
最合适的回答,由SO网友:Vasim Shaikh 整理而成
出现此类错误时,可以尝试以下操作:
搜索包含函数定义的php文件。已验证文件是否存在。
已验证页面中是否存在上述文件的require(或include)语句。此外,请验证“要求/包括”中的绝对路径是否正确。
验证了Requirementation中的文件名拼写是否正确。
回显了包含文件中的一个单词,以查看它是否被正确包含。在文件末尾定义了一个单独的函数,并调用了它。它也起作用了。
Problem :
<您的函数可能位于不同的命名空间中,而不是从中调用它
Solution : $this->引用属于类且在类内声明的函数,同样的事情也适用于在类内声明的变量。类内部称为$this->function(),如果类外部为public,则称为$theclass->function()