php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-01-2010, 15:57
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard Anhängen von Code in eine Methode

Hat PHP irgend eine Möglichkeit bei einer vorhandenen Methode einer Klasse code zu inizieren?

Ich habe eine Klasse Foo, die definiert eine Methode bar, welche den Zustand dieser Klasse ändert. Ich habe nun aber keine Möglichkeit durch Vererbung von Foo die methode bar zu überschreiben.

Hat PHP irgend einen Handler der am Anfang und am Ende von Methoden aufgerufen wird? So ein onMethodEnter und Exit listener?
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #2 (permalink)  
Alt 05-01-2010, 15:59
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
welche den Zustand dieser Klasse ändert
Kannst du mal genauer erläutern? Anhand von einem Codebeispiel?

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 05-01-2010, 16:05
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich versuchs
PHP-Code:
class Foo
{
  protected 
$irgendwas;
  public function 
bar()
  {
     
$this->irgendwas 'was anderes';
  }
}; 
bar ändert den Zustand der Instanz der Klasse und ich würd gerne quasi noch Code inizieren ohne es an dieser Stelle zu tun.

Quasi später im Code so was wie ein "afterBar" Hook, der nachträglich noch was ändert (so was wie die __get magic method nur für existierende Methode)
Grund ist: Ich weiß nicht, was bar alles macht, aber ich weiß, was ich ändern will, die Stelle, an der ich das ändern will, hat aber keine Verbindung mit der Stelle, wo bar definiert wird(also keine Verbindung zum Code da oben)
Ich will auch nicht eine dummy Methode in Foo haben, die leer ist, aber von bar aufgerufen wird.
Ein Event-Dispatcher funktioniert an der Stelle leider auch nicht. Der Code muss wie ein Teil der Klasse von PHP gesehen werden
__________________
SQL Injection kitteh is...

Geändert von Seikilos (05-01-2010 um 16:08 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 05-01-2010, 16:08
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Suchst du das "Observer Design Pattern" ??


Zitat:
Der Code muss wie ein Teil der Klasse von PHP gesehen werden
Nein!
Keine Chance.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 05-01-2010, 16:09
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von Seikilos Beitrag anzeigen
Der Code muss wie ein Teil der Klasse von PHP gesehen werden
Warum das?
Warum kannst du nicht eine Ableitung der Klasse erstellen und die Methode überschreiben?

So wie du es beschreibst, funktioniert es nicht. PHP ruft nicht automatisch irgendwelche Funktionen auf, bevor oder nachdem es eine Methode ausführt. Es gibt auch keine Möglichkeit, soetwas zu implementieren, ohne die Methode oder ihren Aufruf zu verändern.
Mit Zitat antworten
  #6 (permalink)  
Alt 05-01-2010, 16:09
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, das nicht.
Observer Pattern ähenlt dem Event-Dispatcher, den ich erwähnte.
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #7 (permalink)  
Alt 05-01-2010, 16:12
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Zitat von Seikilos Beitrag anzeigen
Nein, das nicht.
Observer Pattern ähenlt dem Event-Dispatcher, den ich erwähnte.
Dann sehe ich keine Chance für dich.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #8 (permalink)  
Alt 05-01-2010, 16:19
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ok, ich erkläre es mal mit viel Luft.

Ich habe eine Klasse die ist tief in den Innereien eines Projekts begraben. Die Definiert ein komplexes Verhalten und funktioniert wunderbar, wenn man das Projekt über den Browser nutzt.

Neben der normalen Nutzung gibt es aber eine TestSuite, die führt Regressionstest an dem kompletten integriertem System über einen dummy browser. Es werden also fake http requests gesendet.
An dieser Stelle muss die oben erwähnte Klasse nun aber etws anderes tun. Sie soll sich unter Test anders verhalten. In der TestSuite komme ich aber an keine Instanz dieser Klasse, ich bin zwar ein php script, aber ich nutze aber eine php browser klasse.
Was ich tun kann, ist die Methode in dem Test script zu überladen, ich kann mein Foo::bar quasi neu implementieren, um das andere Verhalten zu erzeugen. Aber ich will dass Foo::bar ausgeführt wird, weil die Implementierung korrekt ist und ich nachträglich nur eine Variable anpassen möchte.

Ich kann an bar kein Event auslösen und kriege mein Mock Objekt auch nicht durch Vererbung durchgereicht bis zu dem Punkt, an dem quasi Foo durch MockFoo ersetzt werden könnte. Da wäre Vererbung kein Thema.
Events gehen da nicht, weil die Klasse, so wie sie ist perfekt für den produktiven Einsatz ist und ich die Logik nicht um schmuzige Hacks erweitern will, nur um was zu testen
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #9 (permalink)  
Alt 05-01-2010, 16:29
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Es wäre sowieso falsch, das Verhalten von zu testendem Code für den Test zu verändern. Man will doch "den richtigen Code" "unter realen Bedingungen" testen. Wenn du zusätzlichen Code ausführst, testest du im Endeffekt nicht mehr das, was im Livebetrieb passiert und/oder müsstest irgendwie sicherstellen (durch Tests), dass der zusätzliche Code keine Nebenwirkungen hat, sich also in jeder Hinsicht identisch verhält.

Wieso simulierst du mit PHP nicht einfach den Browser? Oder benutzt gleich Selenium? Dann machst du sozusagen genau das selbe wie die TestSuite bisher und alles kann so bleiben wie es ist.
Mit Zitat antworten
  #10 (permalink)  
Alt 05-01-2010, 16:33
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Naja, der Haken an der ganzen Sache ist, die beschriebene Klasse ist ein HTML Formular und das was ich zum Testen raushängen will ist das captcha

Ich sitz den ganzen Tag dran, selenium noch der Browser kriegen das captcha raus (was gut ist) und ich kann die Abfrage an den captcha server nicht faken (ist reCaptcha und die haben nur ne Api für "Antwort richtig" und "Antwort falsch")
:/
Aber was mir gerade klar geworden ist, ich kann mit dem Hack von mir, den hier beschrieben habe, zumindest den Captcha Validator überschreiben.
Dass muss ich mal testen
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #11 (permalink)  
Alt 05-01-2010, 16:34
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wenn den Objekt sein Verhalten anhand irgendwelcher Kriterien ändern soll, dann muss es Dinge über die Umwelt wissen. Es muß entscheiden können.

Kann es das nicht, dann ist es das falsche Objekt für diesen Zweck.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 05-01-2010, 16:50
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Seikilos Beitrag anzeigen
Naja, der Haken an der ganzen Sache ist, die beschriebene Klasse ist ein HTML Formular und das was ich zum Testen raushängen will ist das captcha

Ich sitz den ganzen Tag dran, selenium noch der Browser kriegen das captcha raus (was gut ist) und ich kann die Abfrage an den captcha server nicht faken (ist reCaptcha und die haben nur ne Api für "Antwort richtig" und "Antwort falsch")
Gibt es da keine Art "Test-Modus"? Sowas wäre nämlich üblich.
Mit Zitat antworten
  #13 (permalink)  
Alt 05-01-2010, 16:58
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was ist ein Testmodus? Ich erkenne natürlich, ob ich mich in test, prod oder dev environment befinde, will aber keine Hacks im funktionierenden Code dafür
__________________
SQL Injection kitteh is...
Mit Zitat antworten
  #14 (permalink)  
Alt 05-01-2010, 17:02
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Seikilos Beitrag anzeigen
Was ist ein Testmodus? Ich erkenne natürlich, ob ich mich in test, prod oder dev environment befinde, will aber keine Hacks im funktionierenden Code dafür
Üblicherweise haben API (zB. Bezahlsysteme) einen Testmodus, den man mit einem zusätzlichen Parameter aktivieren kann. Das sollte alles in der Doku stehen.
Mit Zitat antworten
  #15 (permalink)  
Alt 05-01-2010, 17:03
Seikilos
 Registrierter Benutzer
Links : Onlinestatus : Seikilos ist offline
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 498
Seikilos ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du meinst die Api des captchas? Das schrieb ich ja weiter oben, dort hab ich als erstes gefragt, haben sie nicht. Fänd ich eigentlich auch sinnig
__________________
SQL Injection kitteh is...
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Per Code eine Seite aufrufen? dommeliveaol PHP Developer Forum 17 21-10-2009 20:55
Pfeiltaste auf der Tastatur soll eine PHP-Methode ausführen bambus PHP Developer Forum 9 26-09-2006 08:01
Suche einen Code um eine ....... MonsterFox PHP Developer Forum 13 11-09-2006 18:31
[OOP] Alias für eine Methode erstellen Maranello-550 PHP Developer Forum 6 01-08-2005 16:06
warum kann ich nur eine variable an ob_start anhängen? ethan PHP Developer Forum 8 28-05-2002 02:19

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:59 Uhr.