我正在开发一个Wordpress插件,并尝试使用以下函数返回一个名为$user_country
的变量,该变量可以在同一文件的其他函数中访问。当我将它嵌套在另一个函数中时,代码可以工作,但是当我将它作为自己的函数时,我无法从其他函数访问变量$user_country
。
(我仍然是PHP /编码的新手并且正在努力学习,如果我犯了一个明显的新手错误就不会感到惊讶。)
function get_user_country() {
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"];
}
if (!filter_var($ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE) {
$gi = \LSMIGeoIP\geoip_open(WP_PLUGIN_DIR . "/location-specific-menu-items/GeoIP.dat", 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) {
$gi = \LSMIGeoIP\geoip_open(WP_PLUGIN_DIR . "/location-specific-menu-items/V6GeoIP.dat", 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;
}
答案 0 :(得分:1)
您可能想要使用的是函数内部的类,如:
$timeout
答案 1 :(得分:1)
忘记糟糕的设计和糟糕的代码(尽量避免将任意函数耦合到某个全局变量。再说一遍,你使用Wordpress你已经深陷糟糕的坏代码中),至少有三种方法可以实现你的目标想。
$global = 88; function foo() { global $global; $global = 527; } print $global; // prints 88; foo(); print $global; // prints 527;
function foo(&$myRef) { $myRef = 527; } $x = 88; foo($x); // now $x has the value 527. But you still need to pass it to the next function.
global
命名空间有点像全局匿名类,其中包含所有内容。但最好定义包含变量的类和共享变量的函数:class MySetOfArbitraryStaitcFunctions { private static $myVar; public static function foo() { $myVar = 527; } public static function printMyVar() { print self::$myVar(); }
当然,您可以将var存储在某些第三方全局可访问存储(如会话或数据库)中。但基本上你通过共享变量存储的东西来做共享全局变量的事情。