[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Caller - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
demer
Beiträge: 22
Registriert: 6. Mai 2005, 18:09
Kontaktdaten: Website

Caller

26. Jul 2005, 21:27

Hallo zusammen,

die PHP Cracks sind gefragt.
Kann ich innerhalb einer Function oder einer Methode herausfinden
wer (welches andere Object oder function) mich aufgerufen hat?

in JavaScript geht sowas, dort gibt es glaubs ein Caller Objekt.

Hat jemand einen Tip?

p.s. ich brauche das für ein AddOn dass ich grad schreibe ;)

gr
roman

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

26. Jul 2005, 23:47

Hi
Ich denke das ist nicht relevant. Zumindest nicht bei der Funktion.
Beschreib bitte die Aufgabenstellung etwas näher.

LG Alex

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

27. Jul 2005, 10:20

Hi,

ich glaube, dass das geht, aber ich finde es grad nicht...
Aber ich vermute, dass man deinem Problem auch anderes begegnen kann.

Könntest du ein paar mehr Informationen posten?

Gruß,
Markus

demer
Beiträge: 22
Registriert: 6. Mai 2005, 18:09
Kontaktdaten: Website

My ClassLoader Problem'chen'

30. Jul 2005, 21:04

Hay Markus,

ich habe einen ClassLoader gescrhieben den ich einsetzte um Parent Klassen zu laden bevor die Objekt definition kommt. Das ganze sieht dann etwa so aus:

Code: Alles auswählen

<?

	/**
	 * This is a simple ClassLoader implementation
	 * The only method is import. Call it with a className and it will
	 * search a file in the defined 
	 */

  Class ClassLoader {
		
		function import( $clazz, $debug=false ) {
			
			if($debug) echo "\n<!-- ClassLoader import called for class: $clazz -->";

			$classpath=explode(":", constant("CLASSPATH") );
					
			foreach($classpath as $path) {
				if($debug) echo "\n<!--    Searching in Path: $path -->";
				$filename = "class." . $clazz . ".pclass";			
				if( is_file( $path . "/" . $filename ) ) {
					if( !class_exists( $clazz ) ) {
						if($debug) echo "\n<!--    Class $clazz Found in Path: $path -->";	
						require_once( $path . "/" . $filename );						
						if($debug) echo "\n<!-- Class $clazz Loaded -->";
					}
					return true;
				} 		
			}
			echo ("<H2>ClassNotFoundException: $clazz</H2><br>");	
		}
	}	
	
?>
Aufrufen kann den einfach in einer Klasse mittels:

Code: Alles auswählen

	ClassLoader::import("NewsPDO");
	ClassLoader::import("NewsDAO");
	ClassLoader::import("AbstractController");


	/**
	 * NewsAdminAction does execute the current Form and subpages
	 * It needs to be instanciated and then call execute. That's it.
	 **/
	class NewsAdmin extends AbstractController {

		var $ndata = "";
                 .....
                 .....
                 }

Und dann braucht es noch eine Konstante die den ClassPath definiert,
die muss halt recht früh irgendwo auftauchen.

Code: Alles auswählen

define("CLASSPATH" , (constant("MODULE_HOME") . "/baselib" . ":" . constant("MODULE_HOME") . "/classes") );
Funktioniert prima. Wirklich. Ich hätte im Falle eine ClassNotFoundException gerne ausgegeben wo dieses fehlerhaft ::import denn steht. Da ich im classloader aber keine Referenz auf den 'Auftraggeber' habe hätte mich interessiert ob man irgendwie den Caller einer Methode herausfinden kann.. Also ich habe bisher auch nichts gefunden. Gut im Grunde ist es nur schöner für den Entwickler falls er sich mal vertippt. Funktional hat es keinen Einfluss.

gr
roman

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

Re: My ClassLoader Problem'chen'

30. Jul 2005, 23:41

Hi,
demer hat geschrieben: Funktioniert prima. Wirklich. Ich hätte im Falle eine ClassNotFoundException gerne ausgegeben wo dieses fehlerhaft ::import denn steht. Da ich im classloader aber keine Referenz auf den 'Auftraggeber' habe hätte mich interessiert ob man irgendwie den Caller einer Methode herausfinden kann.. Also ich habe bisher auch nichts gefunden. Gut im Grunde ist es nur schöner für den Entwickler falls er sich mal vertippt. Funktional hat es keinen Einfluss.
Notfalls die Datei und die Zeilennummer mit __FILE__ bzw __LINE__ als Parameter übergeben...

Ist zwar umständlich, führt aber zum gewollten ergebnis.

Gruß,
Markus

Benutzeravatar
alex2911
Beiträge: 567
Registriert: 20. Jul 2005, 04:13
Wohnort: Österreich
Kontaktdaten: Website

1. Aug 2005, 07:01

Und hier ein Fall von "Geht nicht, gibts nicht" :)
http://at2.php.net/manual/de/language.c ... efined.php
Bin gerade über __CLASS__ gestolpert.

Vielleicht hilft´s .

LG Alex

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

1. Aug 2005, 08:10

Hi,
alex2911 hat geschrieben:Und hier ein Fall von "Geht nicht, gibts nicht" :)
http://at2.php.net/manual/de/language.c ... efined.php
Bin gerade über __CLASS__ gestolpert.
Hier ist vorsicht geboten...

__CLASS__ gibts erst seit 4.3.0
Ist also noch recht neu ...

Gruß,
Markus

demer
Beiträge: 22
Registriert: 6. Mai 2005, 18:09
Kontaktdaten: Website

Suppi

2. Aug 2005, 20:19

Suppi,

excellent Jungs/Mädels ;) . Tausend Dank. Wenn ich es mit EVAL einbaue, dann sollte ich keinen Fehler bekommen wenn jemand eine ältere PHP version hat. Ich probiers mal aus. :)

also danke nochmals.

gr
roman

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

Re: Suppi

2. Aug 2005, 23:08

demer hat geschrieben: excellent Jungs/Mädels ;) . Tausend Dank. Wenn ich es mit EVAL einbaue, dann sollte ich keinen Fehler bekommen wenn jemand eine ältere PHP version hat. Ich probiers mal aus. :)
EVAL sollte man auf jeden FAll vermeiden!!!

notfalls mal in PEAR Compat package vorbeischauen...

Da gibts glaub ich einen Workaround für __CLASS__...
Notfalls diesen übernehmen..

Gruß,
Markus

Zurück zu „Allgemeines [R2]“