ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
253
253
EMPFEHLEN
-
10.09.05 14:24 #1
- Registriert seit
- Jan 2005
- Beiträge
- 121
Hallo..
Ich habe ein Problem und finde einfach keine Lösung.. Ich möchte eine Funktion, die in einer Klasse ist, vor jedem anderen Funktionsaufruf der Klasse ausführen..
Ein Beispiel..
PHP-Code:
class Klasse
{
private $counter;
public function __construct ()
{
$this->counter = 0;
}
private function IchWillImmerAufgerufenWerden ()
{
print ++$this->counter;
}
public function Test1 ()
{
print " x aufgerufen!<BR>";
}
public function Test2 ()
{
print " x aufgerufen!<BR>";
}
}
$cls = new Klasse ()
$cls->Test1 ();
$cls->Test2 ();
/*
Ausgabe soll sein:
1 x aufgerufen!
2 x aufgerufen!
*/
Das ich die Funktion "IchWillImmerAufgerufenWerden" in den Funktionen "Test1" und "Test2" einfach nur aufrufen könnte weiss ich.. nur das möchte ich nicht, weil meine Klasse vererbt werden soll und ich daher nicht weiss wie die Funktionen heißen werden!
-
So vielleicht? Denn eine andere Möglichkeit wäre mir auch neu. ( oder sie fällt mir gerade nicht einPHP-Code:
public function Test1 ()
{
$this->IchWillImmerAufgerufenWerden();
print " x aufgerufen!<BR>";
}
public function Test2 ()
{
$this->IchWillImmerAufgerufenWerden();
print " x aufgerufen!<BR>";
}
)
greetz
daddzbe inspired...simplify...
-
Du könntest deine Methodennamen intern mit einem Präfix (z.B. einem Unterstrich) versehen und sie auf private setzen. Methodenaufrufe von außerhalb werden dann über die „magische Methode“[1] __call abgehandelt, die immer dann in Aktion tritt, wenn eine Methode aufgerufen wird, die nicht existiert. Darin führen wir zuerst IchWillImmerAufgerufenWerden und anschließend die tatsächliche Methode (durch voranstellen des Präfixes) aus.
[1] „magische Methode“ deshalb, weil sie selbstständig von PHP zum geeigenten Zeitpunkt aufgerufen wird
Verwirrt? Gut, dann gibt's gleich noch etwas Quelltext:
Ist zwar keine recht schöne Lösung, aber sie funktioniert zumindestPHP-Code:<?php
class Klasse
{
private $counter;
public function __construct()
{
$this->counter = 0;
}
private function IchWillImmerAufgerufenWerden()
{
print ++$this->counter;
}
public function __call($method, $args)
{
if (!method_exists($this, '_'.$method)) {
// Die angeforderte Methode ist nicht implementiet
// => Fehler!
trigger_error('Call to undefined method '.$method,
E_USER_ERROR);
}
$this->IchWillImmerAufgerufenWerden();
return call_user_func_array(array($this, '_'.$method),
$args);
}
private function _Test1()
{
print '× aufgerufen!'."\n";
}
private function _Test2()
{
print '× aufgerufen!'."\n";
}
}
$cls = new Klasse();
$cls->Test1();
$cls->Test2();
/*
Ausgabe:
1× aufgerufen!
2× aufgerufen!
*/
?>
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
Ähnliche Themen
-
Methodenaufruf
Von dern3ro im Forum Java GrundlagenAntworten: 1Letzter Beitrag: 17.06.10, 19:57 -
NullPointerException bei Methodenaufruf
Von pel im Forum JavaAntworten: 7Letzter Beitrag: 19.09.07, 15:27 -
Methodenaufruf bei Programmende
Von The_Answer1985 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 30.08.07, 13:48 -
Methodenaufruf
Von The_Answer1985 im Forum JavaAntworten: 4Letzter Beitrag: 26.08.07, 09:05





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren