tag:forum.selfhtml.org,2005:/self return false im Konstruktor – SELFHTML-Forum 2009-06-02T18:50:24Z https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367104#m1367104 Manu manu@bytefresser.de http://www.bytefresser.de 2009-05-28T11:01:13Z 2009-05-28T11:01:13Z return false im Konstruktor <p>Hallo zusammen,</p> <p>stehe hier gerade etwas auf dem Schlauch - ein Objekt wird mit einer Id initialisiert, mit dieser id wird die db abgefragt und im fehlerfall, falls das element mit dieser id nicht gefunden wird, wird false zurückgegeben. das klappt jedoch nicht so wie gewünscht, das objekt ist trotzdem initialisiert. ich lande also nie bei header(...</p> <p>Kann mir gerade jemand auf die sprünge helfen?</p> <p>if ($oObj = new CObj($id)) {<br>  [...]<br> } else {<br> header('Location: index.php');<br> exit();<br> }</p> <p>Gruß,<br> Manu</p> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367117#m1367117 Felix Riesterer Felix.Riesterer@gmx.net http://www.felix-riesterer.de/ 2009-05-28T11:07:16Z 2009-05-28T11:07:16Z return false im Konstruktor <p>Liebe(r) Manu,</p> <blockquote> <p>falls das element mit dieser id nicht gefunden wird, wird false zurückgegeben. das klappt jedoch nicht so wie gewünscht, das objekt ist trotzdem initialisiert.</p> </blockquote> <p>gehe immer davon aus, dass ein Objekt zurückgegeben wird! Das ist die grundsätzliche Idee eines Konstruktors. Du kannst in das Objekt aber eine Eigenschaft einbauen, die Fehlermeldungen oder -codes aufnimmt.</p> <p>Prüfe nach der Erstellung des Objektes dieses auf diese Fehlereigenschaft, bevor Du etwas mit dem Objekt anstellst. Das ist die sinnvollste Methode mit Fehlern bei Konstruktorfunktionen umzugehen.</p> <p>Ich werde diesbezüglich wohl meinen JavaScript-Artikel korrigieren müssen, wo auch ein new Boolean(false) zurückgegeben wird, anstatt dem Objekt eine Fehlereigenschaft zurückzugeben.</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> <div class="signature">-- <br> ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:) </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367106#m1367106 Tom bitworks@web.de http://selfhtml.bitworks.de 2009-05-28T11:09:18Z 2009-05-28T11:09:18Z return false im Konstruktor <p>Hello,</p> <blockquote> <p>Kann mir gerade jemand auf die sprünge helfen?</p> <p>if ($oObj = new CObj($id)) {<br> [...]<br> } else {<br> header('Location: index.php');<br> exit();<br> }</p> </blockquote> <p>Ein Konstruktor hat keinen Rückgabewert.</p> <p>Du kannst aber eine (private) Eigenschaft des Objektes setzen lassen, ob es vernünftig initialisiert wurde. Das Objekt wird aber auf jeden Fall erzeugt, wenn die Speicherverwaltung nicht schlapp macht.</p> <p>if (!is_NULL($oObj = new CObj($id))<br>    {<br>        if ($oObj->get_error())<br>        {<br>            header('Location': http://ecample.org/index.php);<br>        }</p> <p>## ...</p> <p>}</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br> Nur selber lernen macht schlau<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367105#m1367105 Encoder 2009-05-28T11:59:30Z 2009-05-28T11:59:30Z return false im Konstruktor <p>Andere Idee:<br> Ruf statt dem Konstruktor eine statische Methode der Klasse auf, die zuerst die Daten prüft und dann entweder ein verwendbares Objekt zurück liefert, oder nichts.<br> Beim Aufruf siehst du dann was passiert ist.</p> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367111#m1367111 Tom bitworks@web.de http://selfhtml.bitworks.de 2009-05-28T11:13:33Z 2009-05-28T11:13:33Z return false im Konstruktor <p>Hello,</p> <blockquote> <p>header('Location': http://ecample.org/index.php);</p> </blockquote> <p>*huch* was ist da denn passiert?</p> <p>Das sollte heißen:</p> <p>header('Location: http://example.org/index.php);</p> <p>Ein Location-Header benötigt immer eine vollständige URL.<br> Alle anderen Varianten funktionieren nur zufällig.</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br> Nur selber lernen macht schlau<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367107#m1367107 dedlfix 2009-05-28T13:47:38Z 2009-05-28T13:47:38Z return false im Konstruktor <p>echo $begrüßung;</p> <p>Ergänzend:</p> <blockquote> <p>Ein Konstruktor hat keinen Rückgabewert.</p> </blockquote> <p>Jedenfalls nicht mehr. Wenn ich mich recht erinnere, konnte man bei PHP 4 den Konstruktor mit return was anderes liefern lassen. PHP 5 macht das aber nicht mehr mit.</p> <blockquote> <p>Du kannst aber eine (private) Eigenschaft des Objektes setzen lassen, ob es vernünftig initialisiert wurde.</p> </blockquote> <p>Das halte ich nicht für eine besonders gute Idee, zumal es mit der Exception oder dem Factory- respektive Singleton-Pattern Möglichkeiten gibt, bei der am Ende kein "unvernünftiges" Objekt entsteht.</p> <p>echo "$verabschiedung $name";</p> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367108#m1367108 Tom bitworks@web.de http://selfhtml.bitworks.de 2009-05-28T14:17:10Z 2009-05-28T14:17:10Z return false im Konstruktor <p>Hello,</p> <blockquote> <blockquote> <p>Ein Konstruktor hat keinen Rückgabewert.</p> </blockquote> <p>Jedenfalls nicht mehr. Wenn ich mich recht erinnere, konnte man bei PHP 4 den Konstruktor mit return was anderes liefern lassen. PHP 5 macht das aber nicht mehr mit.</p> </blockquote> <p>Das ist (war) nun sicherlich wieder eine Besonderheit von PHP und anderen Sprachen, die mit varianten Typen umgehen können. Wäre schon lustig, wenn eine OOP-Hochsprache dies zulassen würde, also einen beliebigen Wert anstelle einer Referenz auf das instantiierte Objekt zurückzugeben.</p> <blockquote> <blockquote> <p>Du kannst aber eine (private) Eigenschaft des Objektes setzen lassen, ob es vernünftig initialisiert wurde.</p> </blockquote> <p>Das halte ich nicht für eine besonders gute Idee, zumal es mit der Exception oder dem Factory- respektive Singleton-Pattern Möglichkeiten gibt, bei der am Ende kein "unvernünftiges" Objekt entsteht.</p> </blockquote> <p>Das kommt doch darauf an, was die automatisch vom Konstruktor aufgerufene run()-Methode (oder wie auch immer man sie nennt) des Objektes veranstaltet. Die Initialisierung sollte doch auf jeden Fall erstmal ordnungsgemäß stattfinden.</p> <p>Und wie man ein Objekt dann intern gegen Fehlbedienung absichert, ist auch nicht direkt daran gekoppelt, ob man es überhaupt erzeugen kann oder nicht.</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br> Nur selber lernen macht schlau<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367109#m1367109 Encoder 2009-06-02T18:08:55Z 2009-06-02T18:08:55Z return false im Konstruktor <blockquote> <p>Und wie man ein Objekt dann intern gegen Fehlbedienung absichert, ist auch nicht direkt daran gekoppelt, ob man es überhaupt erzeugen kann oder nicht.</p> </blockquote> <p>Das ist richtig. Nur würde ich persönlich mir hier die Frage stellen ob ich das Objekt überhaupt erzeugen *will*, wenn ich später sowieso nichts damit anfangen kann ;-)</p> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367110#m1367110 Tom bitworks@web.de http://selfhtml.bitworks.de 2009-06-02T18:50:24Z 2009-06-02T18:50:24Z return false im Konstruktor <p>Hello,</p> <blockquote> <blockquote> <p>Und wie man ein Objekt dann intern gegen Fehlbedienung absichert, ist auch nicht direkt daran gekoppelt, ob man es überhaupt erzeugen kann oder nicht.<br> Das ist richtig. Nur würde ich persönlich mir hier die Frage stellen ob ich das Objekt überhaupt erzeugen *will*, wenn ich später sowieso nichts damit anfangen kann ;-)</p> </blockquote> </blockquote> <p>Es ist ja nicht gesagt, dass die Voraussetzungen für eine sinnvolle Benutzung sich nicht nachholen lassen. Nur bei sehr einfachen Objekten würde ich glcieh mit einer Exception und der Ablehnung der Instatiierung reagieren.</p> <p>Aber stell Dir mal vor, ein Objekt muss für die Funktionstüchtigkeit mehrere Ressourcen anfordern und sichern. Von sieben bekommt es nur fünf. Zwei sind im Instantiierungszeitpunkt noch belegt.</p> <p>Nun könnte es sinnvoll sein, die fünf anderen für einen kurzen Moment festzuhalten und die beiden anderen nachträglich zu holen. Das Programm kann aber zwischendurch noch andere Dinge erledigen und muss nicht stumpf mit Nichtstun auf die Freigabe warten.</p> <p>In Multithreading-Umgebungen hat man das mMn öfter. Ich kenne die AUfgabenstellung noch aus der grauen Vergangenheit.</p> <p>Da hat man aber noch in (hauptsächlich) singlesthreadorientierten Umgebungen mit Joblists gearbeitet. War ein Job derzeit nicht erfüllbar, wurde ein kleinerer untergeordneter zwischengeschoben.</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br> Nur selber lernen macht schlau<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367116#m1367116 Manu manu@bytefresser.de http://www.bytefresser.de 2009-05-28T11:16:35Z 2009-05-28T11:16:35Z return false im Konstruktor <p>Hallo Ihr zwei,</p> <p>ja klar, der fehlende Rückgabewert wars...oweia... Danke für den Hinweis...</p> <p>den kompletten Url in header() beherzige ich eigentlich, hier wars nur das manuelle entfernen :)</p> <p>Danke nochmal & Gruß,<br> Manu</p> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367112#m1367112 MudGuard http://www.andreas-waechter.de/ 2009-05-28T13:12:36Z 2009-05-28T13:12:36Z return false im Konstruktor <p>Hi,</p> <blockquote> <p>Hello,</p> <p>»»            header('Location': http://ecample.org/index.php);</p> <p>*huch* was ist da denn passiert?</p> <p>Das sollte heißen:</p> <p>header('Location: http://example.org/index.php);</p> </blockquote> <p>Nö, sollte es nicht. ) sollte nicht unkodiert in der Url stehen.</p> <p>Und irgendwo sollte auch ein Ende des Strings sein ...</p> <p>cu,<br> Andreas</p> <div class="signature">-- <br> <a href="http://MudGuard.de/" rel="nofollow noopener noreferrer">Warum nennt sich Andreas hier MudGuard?</a><br> <a href="http://ostereier.andreas-waechter.de/" rel="nofollow noopener noreferrer">O o ostern ...</a><br> Fachfragen per Mail sind unverschämt, werden ignoriert. Das Forum existiert.<br> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367113#m1367113 Tom bitworks@web.de http://selfhtml.bitworks.de 2009-05-28T13:21:31Z 2009-05-28T13:21:31Z return false im Konstruktor <p>Hello,</p> <blockquote> <blockquote> <p>»»            header('Location': http://ecample.org/index.php);</p> <p>*huch* was ist da denn passiert?</p> <p>Das sollte heißen:</p> <p>header('Location: http://example.org/index.php');</p> </blockquote> <p>Nö, sollte es nicht. ) sollte nicht unkodiert in der Url stehen.</p> </blockquote> <p>DAS war jetzt aber The Man in the Middle :-P</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br> Nur selber lernen macht schlau<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367114#m1367114 MudGuard http://www.andreas-waechter.de/ 2009-05-28T19:47:18Z 2009-05-28T19:47:18Z return false im Konstruktor <p>Hi,</p> <blockquote> <p>»» Nö, sollte es nicht. ) sollte nicht unkodiert in der Url stehen.</p> <p>DAS war jetzt aber The Man in the Middle :-P</p> </blockquote> <p>Man in the middle? Between Ireland and Great Britain?<br> Ja, ist ne schöne Insel ;-)</p> <p>cu,<br> Andreas</p> <div class="signature">-- <br> <a href="http://MudGuard.de/" rel="nofollow noopener noreferrer">Warum nennt sich Andreas hier MudGuard?</a><br> <a href="http://ostereier.andreas-waechter.de/" rel="nofollow noopener noreferrer">O o ostern ...</a><br> Fachfragen per Mail sind unverschämt, werden ignoriert. Das Forum existiert.<br> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367115#m1367115 Tom bitworks@web.de http://selfhtml.bitworks.de 2009-05-28T19:50:44Z 2009-05-28T19:50:44Z return false im Konstruktor <p>Hello,</p> <blockquote> <p>Man in the middle? Between Ireland and Great Britain?<br> Ja, ist ne schöne Insel ;-)</p> </blockquote> <p>Gehört die auch noch zu den steuerbegünstigten Inseln?</p> <p>Liebe Grüße aus dem schönen Oberharz</p> <p>Tom vom Berg<br> <img src="http://selfhtml.bitworks.de/Virencheck.gif" alt="" loading="lazy"></p> <div class="signature">-- <br> Nur selber lernen macht schlau<br> <a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a> </div> https://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367118#m1367118 Bademeister 2009-05-28T11:21:58Z 2009-05-28T11:21:58Z return false im Konstruktor <p>Hi Felix (und Manu),</p> <blockquote> <p>gehe immer davon aus, dass ein Objekt zurückgegeben wird! Das ist die grundsätzliche Idee eines Konstruktors.</p> </blockquote> <p>der Konstruktor kann verhindern, dass das Objekt erzeugt wird, indem er eine Exception wirft. Das waere hier eine vernuenftige Loesung.</p> <pre><code class="block language-php"> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token variable">$oObj</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">CObj</span><span class="token punctuation">(</span><span class="token variable">$id</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> <span class="token variable">$construct_error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">[</span><span class="token operator">...</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> </code></pre> <p>Viele Gruesse,<br> der Bademeister</p>