{"issue":{"created_at":"2011-11-29T10:12:33Z","state":"open","updated_at":"2011-11-29T10:12:36Z","user":{"gravatar_id":"256406243346b9253f8610fb1d1e05f6","id":1215373,"url":"https://api.github.com/users/importer","login":"importer","avatar_url":"https://secure.gravatar.com/avatar/256406243346b9253f8610fb1d1e05f6?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"comments":3,"body":"Hi Leo,\nmeine survey_ce-Erweiterung kracht immer, wenn es eine installierte Erweiterung gibt, die den loadLanguageFile Hook verwendet. Das ganze passiert beim Aufrufen der Hook-Funktion in System.php. Der Import der Hook-Klasse liefert kein gültiges Objekt zurück, obwohl die Klasse existiert.\n\n```\n$this->import($callback[0]);\n$this->$callback[0]->$callback[1]($strName, $strLanguage);\n```\n\nEigentlich mache ich nichts dramatisches in survey_ce. Es handelt sich dabei um meine Umfrage-Erweiterung. Die benutzt jede Menge Fragentypen, die alle Nachfahren einer abstrakten Klasse SurveyQuestion sind, die wiederum ein Nachfahre von Backend ist.\nAn einigen Stellen im Backend instanziiere ich nun Objekte der SurveyQuestion-Nachfahren über das - meiner Meinung nach korrekte - Verfahren, dass ich\n\n$class = 'Name_der_SurveyQuestion_Nachfahr_Klasse';\n$this->import($class);\n$obj = new $class();\n\nIm Konstruktor der Klasse werden dann nach dem Aufrufen des Superkonstruktors mit $this->loadLanguageFile() benötigte Sprachdateien geladen. Funktioniert auch alles super, wenn der loadLanguageFile-Hook nirgendwo gesetzt ist. Sobald der aber gesetzt ist, kracht es dann eben beim Aufruf der Hook-Funktion, weil die Klasse nicht instanziiert wurde.\n\nIch hab schon versucht, alles mögliche zu debuggen, komme aber nicht weiter. Ich gehe mal davon aus, dass es eigentlich nicht an der import()-Methode liegt, denn die Funktioniert ja eigentlich immer. Aber offenbar kann man sie durch ungeschicktes Aufrufen an falschen Stellen offenbar durcheinander bringen, anders kann ich mir das nicht erklären.\n\nSelbst wenn import rekursiv immer andere Klassen importiert, so müsste doch eigentlich erst ein Rücksprung erfolgen, wenn die ursprünglich gewünschte Klasse auch importiert ist, oder nicht?\n\nMan kann das reproduzieren, indem man z.B. survey_ce installiert, eine Umfrage anlegt, Daten erzeugt und dann in die Teilnehmerauswertung geht. Ist 'ne Menge Holz und nicht so schnell zu machen. Wenn dann z.B. easy_themes installiert ist, das den loadLanguageFile Hook benutzt kracht es, sobald ich da in survey_ce mal loadLanguageFile() aufrufe.\n\nIrgendwie nicht logisch das alles. Die Frage ist, hast du evtl. eine Idee was das sein kann? Die Lösung, zu überprüfen, ob durch import() auch wirklich ein Objekt erzeugt wurde und nur dann den Hook aufzurufen würde zwar das Problem beheben, aber ja sicherlich nicht die Ursache.\n\nWenn du das Gefühl hast, dass evtl. doch etwas mit der import() Methode nicht ganz koscher ist oder eine Idee hast, woran das evtl. liegen könnte, dann melde dich doch bitte bei mir. Ich kann dir auch ein Testszenario zukommen lassen bzw. einen Zugang auf einem Testsystem.\n\n[Download the attachments](http://www.contao.org/tl_files/tickets/2731.zip \"Download the attachments of this ticket\")\n\n--- _Originally created by hschottm on December 10th, 2010, at 06:56pm (ID 2731)_","assignee":null,"id":2382541,"number":2731,"pull_request":{"patch_url":null,"html_url":null,"diff_url":null},"labels":[{"name":"backend","color":"e6e6e6","url":"https://api.github.com/repos/contao/test/labels/backend"},{"name":"Defect","color":"bd2c00","url":"https://api.github.com/repos/contao/test/labels/Defect"},{"name":"Pending","color":"ffdd00","url":"https://api.github.com/repos/contao/test/labels/Pending"}],"title":"loadLanguageFile Hook führt zu Absturz","closed_at":null,"html_url":"https://github.com/contao/test/issues/2731","url":"https://api.github.com/repos/contao/test/issues/2731","milestone":null},"action":"created","comment":{"created_at":"2011-11-29T10:12:36Z","updated_at":"2011-11-29T10:12:36Z","user":{"gravatar_id":"256406243346b9253f8610fb1d1e05f6","id":1215373,"url":"https://api.github.com/users/importer","login":"importer","avatar_url":"https://secure.gravatar.com/avatar/256406243346b9253f8610fb1d1e05f6?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"},"body":"Wow, ich weiß ja nicht, ob das ich, Contao oder PHP ist... Hier mal ein schönes Beispiel, PHP-Experten vor, ich bin nämlich keiner:\n\n```\nclass LangTest extends Backend\n{\n\tpublic function __construct()\n\t{\n\t\tparent::__construct();\n\t\t$this->loadLanguageFile('tl_task');\n\t}\n\n\tpublic function __set($name, $value) \n\t{\n\t}\n}\n```\n\nDas Teil irgendwo eingebunden im Backend über \n\n```\n$this->import('LangTest');\n$test = new LangTest();\n```\n\nkracht, sobald irgendwo ein loadLanguageFile-Hook eingebunden ist, z.B. easy_themes. Lässt man die Überladung mit __set weg, läuft es einwandfrei. Ich habe in PHP aber nirgendwo gefunden, dass man die __set-Überladung nicht auch erst zu einem späteren Zeitpunkt in der Vererbungshierarchie verwenden darf.\nWas ist das also?\nläuft.\n\n--- _Originally created by hschottm on December 11th, 2010, at 12:00pm_","id":2926913,"url":"https://api.github.com/repos/contao/test/issues/comments/2926913"}}