Frage

Ihr spezielles Szenario eines Text Transformation mithilfe von regulären Ausdrücken in einem privaten Verfahren beinhaltet das tun. Die private Methode ruft preg_replace_callback, aber scheint, dass Rückrufe auf Objekte öffentlich sein müssen, also bin ich aus der privaten Welt stecken zu brechen und Implementierungsdetails aussetzt, wenn ich möchte lieber nicht.

Also, auf den Punkt gebracht: Kann ich eine Instanz Methode als Rückruf ohne Einkapselung zu verlieren

?

Danke.

War es hilfreich?

Lösung

Ja, es scheint, können Sie:

<?php

//this works
class a {
   private function replaceCallback($m) { return 'replaced'; }

   public function test() {
        $str = " test test ";
        $result = preg_replace_callback('/test/', array($this, 'replaceCallback'), $str);
        echo $result;
   } 
}

$a = new a();
$a->test();


//this doesn't work
$result = preg_replace_callback('/test/', array(new a(), 'replaceCallback'), ' test test ');    
echo $result;

So ist es, dass preg_replace_callback() scheint, oder PHP-Callback-Mechanismus, ist sich der Umfang, in dem es hieß.

Getestet auf 5.2.8

Andere Tipps

Können Sie einen separaten Hilfsklasse für die Textverarbeitung, erstellen und die Callback-Methode innerhalb dieser Klasse erstellen (es kann öffentlich da sein)? Sie können in einem Verweis auf die ursprüngliche Klasse übergeben (Objekt), wenn Sie den Zugriff auf bestimmte Instanz Daten benötigen.

Die öffentliche Schnittstelle zu Ihrer Hauptklasse bleibt konsistent und sauber, und Sie ziehen bestimmte String-Verarbeitung aus einer Klasse wahrscheinlich ist es nicht in irgendeine Weise gehört ...

Können Sie nicht geschützt benutzen? Ich würde müssen wissen, was die Beziehung dieser beiden Klassen in Beziehung zueinander waren mehr klar zu sein, aber man sollte die Klasse erweitern können, und nutzen Sie die neuen geschützten Methoden, die Sie geerbt haben, ohne sie öffentlich zu machen.

Hope, das hilft!

Prost

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top