2017-06-09 6 views
1

Ich versuche, ein Echo von einer Klassenmethode von außerhalb der Klasse zu entfernen. Ich habe es geschafft, es mit dieser Codierung zu tun:Entfernen eines Echos von einer Klassenmethode - PHP

function rewrite() { 
    $rewrite = new ReflectionMethod('WPLogin', 'head'); 

    $filename = $rewrite->getFileName(); 
    $start_line = $rewrite->getStartLine(); 
    $end_line = $rewrite->getEndLine()-1; 

    $length = $end_line - $start_line; 
    $source = file($filename); 
    $body = implode('', array_slice($source, $start_line, $length)); 
    $body = preg_replace('/echo \'\<\!(.*?)\n/', '', $body); 

    eval($body); 
} 

Es funktioniert, aber es ist nicht „sicher zu bedienen“, wie es kann schwierig sein, und es wird mit eval die etwas ist, zu vermeiden.

Gibt es einen besseren Weg, dies zu tun, oder zumindest einen sichereren Weg, dies zu tun?

Antwort

3

wickeln einfach den Methodenaufruf in einem output buffer:

ob_start(); 

// Call method here. 

ob_end_clean(); 

Dies wird eine Ausgabe von der Funktion erfolgt entfernen z.B. echo,

+0

Ich bin irgendwie verwirrt, wie dies zu implementieren, weil ich nicht die Methode aufrufen, ist die Methode im Grunde bereits im Kern selbst initiiert. –

+0

@ J.Doe Können Sie näher erläutern, wie die Methode/Klasse aufgerufen wird und was der Kern ist? Ich verstehe nicht, was Sie meinen: _ "Die Methode ist im Grunde bereits im Kern selbst initiiert" _. –

+0

Ich verwende diesen Code in WordPress, und die Klassenmethode stammt von einem anderen Plugin. In dieser Methode gibt es einige Werbung, die ich entfernen möchte. Also muss ich es von außerhalb der Klasse entfernen, während die Methode bereits geladen ist. –

Verwandte Themen