Ich habe eine function innerhalb einer class geschrieben, die das Land eines Benutzers von der IP-Adresse abruft …
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; }
aber die function innerhalb einer anderen function aufrufen …
function set_visibility( $items, $menu, $args ) { $user_country = getcountry(); ...
gibt einen Fehler zurück: Call to undefined function getcountry()
Wenn ich den Code innerhalb der function nehme und ihn in die andere function lege, wird das Land des Benutzers erfolgreich abgerufen.
Was ist mein Anfängererrors?
Sie können versuchen, zu folgen, während Sie einen solchen Fehler erhalten:
Nach der PHP-Datei mit der functionsdefinition darin gesucht. Überprüft, dass die Datei existiert.
Überprüft, dass die statement require (oder include) für die oben genannte Datei auf der Seite vorhanden ist. Verifiziert auch den absoluten Pfad in der
require / include ist korrekt.
Überprüft, dass der Dateiname in der require-statement richtig geschrieben ist.
Hat ein Wort in der enthaltenen Datei angezeigt, um zu sehen, ob es korrekt eingefügt wurde.
Am Ende der Datei wurde eine separate function definiert und aufgerufen. Es hat auch funktioniert.
Problem :
Lösung:
$ this-> bezieht sich auf eine function, die zu der class gehört und innerhalb der class deklariert wird, dasselbe gilt für Variablen, die innerhalb der class deklariert sind. Innerhalb der class heißt es $ this-> function (), Wenn public außerhalb der class heißt $ theclass-> function ()