2017-03-10 9 views
0

Ich möchte überprüfen, ob eine Funktion eine Variable namens $marker enthält.PHP - Überprüfen, ob eine Funktion enthält

Dies ist, was ich versuche zu tun:

if(function('head') contains '$marker') { 
    return true; 
} 

Gibt es eine Möglichkeit, dies zu tun?

+2

Warum? Es gibt keine echte Rechtfertigung dafür? Variablen in Funktionen sollten nur innerhalb der Funktion selbst relevant sein. Was versuchst du eigentlich zu erreichen? –

+3

Die kurze Antwort ist "NEIN". Sie haben keinen Grund, eine solche Funktion zu benötigen, außer für ein schlecht entworfenes Programm. Was genau willst du erreichen? Was auch immer es ist, es gibt sicherlich andere ("richtige") Wege, dies zu tun. – axiac

+0

@MarkBaker Ich versuche, einige Spam-Mails von einem Plugin zu blockieren. Ich möchte die Plugin-Dateien nicht selbst ändern, da sie nach der Aktualisierung wieder zurück sind. –

Antwort

0

Ummm ... es ist nicht in PHP eingebaut, und, ehrlich gesagt, wäre das Ändern der Dateien besser, aber für Wissenschaft Gründe, schrieb ich einen Scheck dafür. Es ruft den Inhalt der Dateinamen bei jedem Funktionsaufruf ab, daher würde ich empfehlen, den Inhalt der Datei bei mehrmaliger Verwendung in einer anderen Variablen zu speichern, aber dies gibt Ihnen trotzdem eine funktionale Ansicht, wie Sie vorgehen müssen:

<?php 

function test() { $marker;} 

function negativeTest() { 
    $noMarker; 
} 

function checkFunction($function, $variable, $filename) { 
    $file = file_get_contents($filename); 
    preg_match_all("/function\s+([a-z0-9_-]+)\s*\(.*?\)\s*\{((\n|.)*?)\}/im",$file,$matches); 
    for ($i = 0; $i < count($matches[1]); $i++) { 
     if ($matches[1][$i] == $function && strpos($matches[2][$i], $variable) != false) { 
      return true; 
     } 
    } 
    return false; 
} 

echo checkFunction("test","\$marker","index.php"); 

?> 
+1

Ich würde das nie tun – smarber

+0

Ich habe nie zuvor an diese Programmierfrage gedacht, also habe ich beschlossen, etwas zu schreiben, das es könnte. (Und, nein, ich würde es nicht benutzen). – Neil

+0

Sie würden wahrscheinlich besser mit der AST arbeiten (vorausgesetzt, dass Sie den Dateinamen kennen, wo die Funktion definiert ist), oder indem Sie Reflektion verwenden (die direkt mit der Funktion arbeiten kann, ohne den Dateinamen zu kennen) –

Verwandte Themen