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
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/
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/
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
My ClassLoader Problem'chen'
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:
Aufrufen kann den einfach in einer Klasse mittels:
Und dann braucht es noch eine Konstante die den ClassPath definiert,
die muss halt recht früh irgendwo auftauchen.
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
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>");
}
}
?>
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 = "";
.....
.....
}
die muss halt recht früh irgendwo auftauchen.
Code: Alles auswählen
define("CLASSPATH" , (constant("MODULE_HOME") . "/baselib" . ":" . constant("MODULE_HOME") . "/classes") );
gr
roman
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Re: My ClassLoader Problem'chen'
Hi,
Ist zwar umständlich, führt aber zum gewollten ergebnis.
Gruß,
Markus
Notfalls die Datei und die Zeilennummer mit __FILE__ bzw __LINE__ als Parameter übergeben...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.
Ist zwar umständlich, führt aber zum gewollten ergebnis.
Gruß,
Markus
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
http://at2.php.net/manual/de/language.c ... efined.php
Bin gerade über __CLASS__ gestolpert.
Vielleicht hilft´s .
LG Alex
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi,
__CLASS__ gibts erst seit 4.3.0
Ist also noch recht neu ...
Gruß,
Markus
Hier ist vorsicht geboten...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.
__CLASS__ gibts erst seit 4.3.0
Ist also noch recht neu ...
Gruß,
Markus
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Re: Suppi
EVAL sollte man auf jeden FAll vermeiden!!!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.
notfalls mal in PEAR Compat package vorbeischauen...
Da gibts glaub ich einen Workaround für __CLASS__...
Notfalls diesen übernehmen..
Gruß,
Markus