Aufruf zu undefiniertem functionserrors im Plugin

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?

Solutions Collecting From Web of "Aufruf zu undefiniertem functionserrors im Plugin"

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 :

  • Ihre function befindet sich wahrscheinlich in einem anderen Namensraum als der, von dem Sie sie aufrufen.

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 ()