tag:forum.selfhtml.org,2005:/selfreturn false im Konstruktor – SELFHTML-Forum2009-06-02T18:50:24Zhttps://forum.selfhtml.org/self/2009/may/28/return-false-im-konstruktor/1367104#m1367104Manumanu@bytefresser.dehttp://www.bytefresser.de2009-05-28T11:01:13Z2009-05-28T11:01:13Zreturn 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#m1367117Felix RiestererFelix.Riesterer@gmx.nethttp://www.felix-riesterer.de/2009-05-28T11:07:16Z2009-05-28T11:07:16Zreturn 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#m1367106Tombitworks@web.dehttp://selfhtml.bitworks.de2009-05-28T11:09:18Z2009-05-28T11:09:18Zreturn 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#m1367105Encoder2009-05-28T11:59:30Z2009-05-28T11:59:30Zreturn 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#m1367111Tombitworks@web.dehttp://selfhtml.bitworks.de2009-05-28T11:13:33Z2009-05-28T11:13:33Zreturn 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#m1367107dedlfix2009-05-28T13:47:38Z2009-05-28T13:47:38Zreturn 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#m1367108Tombitworks@web.dehttp://selfhtml.bitworks.de2009-05-28T14:17:10Z2009-05-28T14:17:10Zreturn 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#m1367109Encoder2009-06-02T18:08:55Z2009-06-02T18:08:55Zreturn 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#m1367110Tombitworks@web.dehttp://selfhtml.bitworks.de2009-06-02T18:50:24Z2009-06-02T18:50:24Zreturn 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#m1367116Manumanu@bytefresser.dehttp://www.bytefresser.de2009-05-28T11:16:35Z2009-05-28T11:16:35Zreturn 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#m1367112MudGuardhttp://www.andreas-waechter.de/2009-05-28T13:12:36Z2009-05-28T13:12:36Zreturn 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#m1367113Tombitworks@web.dehttp://selfhtml.bitworks.de2009-05-28T13:21:31Z2009-05-28T13:21:31Zreturn 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#m1367114MudGuardhttp://www.andreas-waechter.de/2009-05-28T19:47:18Z2009-05-28T19:47:18Zreturn 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#m1367115Tombitworks@web.dehttp://selfhtml.bitworks.de2009-05-28T19:50:44Z2009-05-28T19:50:44Zreturn 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#m1367118Bademeister2009-05-28T11:21:58Z2009-05-28T11:21:58Zreturn 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>