2012-04-11 15 views
1

ich ein Problem habe mit ia Prüffunktion existiert - ich weiß function_exists() und method_exists(), kann aber die Funktionalität nicht bekomme ich suchtprüfen, ob die Funktion vorhanden ist

I-Funktionen über eine Socket-Verbindung wie $ MM- pass> Spieler-> Spielen(). Danach überprüfe ich sie und gebe das Ergebnis über die Socket-Verbindung zurück.

Ich filtere die Funktionen (muss mit $ MM beginnen, alles andere wird abgelehnt), aber ich kann nicht meinen Code zu überprüfen, ob die Funktion existiert. Dies ist wichtig, da der Server abstürzt, wenn die Funktion nicht existiert.

Wer weiß eine Lösung dafür?

Vielen Dank im Voraus.

der Code:

$MM = new SDBApplication;

Im Konstruktor von SDBApplication:

$this->Player = new SDBPlayer;

habe ich versucht, die folgenden Methoden zu überprüfen: den Code:

method_exists($MM, "Player::Play"); function_exist("$MM->Player->Play);

zurückkehren beide falsch, obwohl die Funktion

Die Lösung

$parts = explode('->', $string); 
$numParts = count($parts)-1; 
$object = '$MM'; 
for($i=0; $i < $numParts; $i++){ 
    $object .= '->'.$parts[$i]; 
} 
$parts[$numParts+1] = preg_replace('(\\(.*\\))', '', $parts[$numParts]); 
eval('$check = method_exists('.$object.', '.$parts[$numParts+1].');'); 

Es muss existiert eval'd werden, da die Eingabe eine Zeichenfolge ist.

+5

können Sie uns zeigen Sie Ihren Code und die Fehler? –

+0

Es ist spät hier, also werde ich das erste Ding morgen tun –

+0

@DavidChan hinzugefügt den Code –

Antwort

6

Versuchen Sie es auf diese Weise um in Ihrem Konstruktor SDBApplication

method_exists($this->Player, 'Play'); 
+1

Das funktioniert. Um die Eingabe zu teilen, muss ich eine Explosion verwenden. Allerdings wundere ich mich, dass, wenn jemand etwas wie $ MM-> DoesNotExists-> Play() 'gibt es mir das richtige Ergebnis geben wird. Ich werde es testen, wenn ich nach Hause komme. –

+0

Persönlich, wenn Ihre Klasse vollständig auf dieser Methode beruht, würde ich False aus dem Konstruktor zurückgeben, wenn es nicht existiert, oder einen Fehler auslösen. – BenOfTheNorth

+0

Es geht nicht darum, dass die Klasse geladen wird, es geht darum, die Benutzereingaben zu filtern, damit der Server nicht abstürzt. Aber ich habe es zur Arbeit, siehe den ursprünglichen Beitrag –

2

function_exists() und method_exists() sind für diese Art von Prüfungen. Erstens für reguläre Funktionen und zweitens für OOP-Funktionen.

+0

Ja, sie sind, aber ich kann es nicht zur Arbeit bekommen. –

Verwandte Themen