Referenz oder "false" zurückgeben

Hallo,

php (5) meckert mit einer Notice, wenn ich eine funktion mit & eine
Referenz zurückgeben lassen will und "false" produziere.

Konkret geht es um eine Suchfunktion, die entweder eine Referenz auf das
gefundene Objekt zurückgeben soll oder false, falls es nicht gefunden
wird.

Ist das überhaupt sauber? Warum meckert PHP? Wie stelle ich das ab?

Servus,
Konni

--
debs-meet 2007 am 07.-09. September
kscheller [ Do, 06 September 2007 15:03 ] [ ID #1814043 ]

Re: Referenz oder "false" zurückgeben

Konni Scheller schrieb:
> php (5) meckert mit einer Notice, wenn ich eine funktion mit & eine
> Referenz zurückgeben lassen will und "false" produziere.
>
> Konkret geht es um eine Suchfunktion, die entweder eine Referenz auf das
> gefundene Objekt zurückgeben soll oder false, falls es nicht gefunden
> wird.
>
> Ist das überhaupt sauber? Warum meckert PHP? Wie stelle ich das ab?

Objekte werden ab PHP 5 immer als Referenz übergeben, sowohl als
Parameter als auch als Rückgabewert. Und eine Referenz von einer
Referenz zurück geben wollen ist nun mal etwas unschön, darum wird
gemeckert. :) Also einfach den Adressoperator wegmachen und freuen, dass
es trotzdem genauso geht wie vorher mit.

Aber an Stellen wo übergebene Objekte manipulierst, wo sich das Objekt
außerhalb nicht mitändern soll aufpassen, da musst dann mit clone
arbeiten (gegebenenfalls mit einer tiefen Kopie, aber da gibt es genug
Beispiele für).

Bei Strings und Arrays ist es ähnlich, da wird auch nur eine Referenz
übergeben, aber (korrigiert mich einer, wenn ich jetzt was falsches
sage) sobald man schreibend darauf zugreift wird eine Kopie angelegt
intern, sodass sich der ursprüngliche String/Array nicht mitändert.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 06 September 2007 15:23 ] [ ID #1814047 ]

Re: Referenz oder "false" zurückgeben

Christoph Herrmann <herrmann [at] dragonprojects.de> wrote:

> Also einfach den Adressoperator wegmachen und freuen, dass
> es trotzdem genauso geht wie vorher mit.

Mit dem kleinen Problem, dass es dann mit PHP4 nicht mehr läuft :-(

Servus,
Konni

--
debs-meet 2007 am 07.-09. September
kscheller [ Do, 06 September 2007 15:57 ] [ ID #1814055 ]

Re: Referenz oder "false" zurückgeben

Konni Scheller schrieb:
> Mit dem kleinen Problem, dass es dann mit PHP4 nicht mehr läuft :-(

Muss es das?

Wenn nicht zwingend, dann portier alles sauber auf PHP 5 (oder bleib
einfach auf PHP 4). Wenn beide Versionen unterstützen willst, solltest
zwei Entwicklungszweige machen.

Alternative wäre, du lebst mit den Notice Meldungen. Ich weiß zwar nicht
was die auswirken dann sind, aber wenn dein Projekt funktioniert und du
damit leben kannst.

Davon kann ich aber abraten, dann bleib lieber auf PHP 4 als dass
undefiniertes Verhalten in Kauf nimmst.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 06 September 2007 16:07 ] [ ID #1814057 ]

Re: Referenz oder "false" zurückgeben

Konni Scheller schrieb:

> Christoph Herrmann <herrmann [at] dragonprojects.de> wrote:
>
>> Also einfach den Adressoperator wegmachen und freuen, dass
>> es trotzdem genauso geht wie vorher mit.
>
> Mit dem kleinen Problem, dass es dann mit PHP4 nicht mehr läuft :-(

Du willst OO-Scripte schreiben, die sowohl unter PHP4 als auch unter
PHP5 laufen? Vergiss es.

Gerade im OO-Bereich hat sich Einiges getan, so dass es Dir wohl kaum
gelingen wird, OO-Scripte zu schreiben, die unter beiden Versionen
unverändert laufen. Zumindest nicht ohne erheblichen Mehraufwand.

Entweder PHP4 oder PHP5 - oder auf OO verzichten.

Gruß. Claus
Claus Reibenstein [ Do, 06 September 2007 18:25 ] [ ID #1814071 ]

Re: Referenz oder "false" zurückgeben

Christoph Herrmann <herrmann [at] dragonprojects.de> wrote:

> Konni Scheller schrieb:
> > Mit dem kleinen Problem, dass es dann mit PHP4 nicht mehr läuft :-(
>
> Muss es das?

Das ist die Frage. Eigentlich nicht. Das "eigentlich" ist das Problem.
Irgendwann könnte ein Fall auftreten, bei dem es noch auf PHP4 laufen
muss. Andererseits ist das ein Argument, dass der Provider endlich ein
Upgrade macht.

> Alternative wäre, du lebst mit den Notice Meldungen.

Jetzt wo ich weiß, wie man E_ALL einschaltet? ;)

Nein, Du hast Recht: besser auf PHP5 portieren und bei Bedarf das
Gegurke mit PEAR loswerden (*das* Upgrade hat mich einige Zeit
gekostet).

Servus,
Konni

--
debs-meet 2007 am 07.-09. September
kscheller [ Do, 06 September 2007 19:07 ] [ ID #1814073 ]

Re: Referenz oder "false" zurückgeben

..oO(Konni Scheller)

>Das ist die Frage. Eigentlich nicht. Das "eigentlich" ist das Problem.
>Irgendwann könnte ein Fall auftreten, bei dem es noch auf PHP4 laufen
>muss. Andererseits ist das ein Argument, dass der Provider endlich ein
>Upgrade macht.

Definitiv. PHP 4 ist praktisch tot. Wann immer möglich, sollte man auf
PHP 5 umsteigen. Ein Host, der das bis heute nicht anbietet, gehört
geohrfeigt.

Micha
Michael Fesser [ Do, 06 September 2007 19:15 ] [ ID #1814074 ]

Re: Referenz oder "false" zurückgeben

Konni Scheller schrieb:
> Jetzt wo ich weiß, wie man E_ALL einschaltet? ;)

unter PHP 5 solltest dann auch strikte Meldungen anschalten, die sind
bei E_ALL nicht dabei. Also musst E_ALL | E_STRICT machen. Strikte
Meldungen sind alle Sachen die unter PHP 5 geändert werden sollten wie
Konstruktoren als "__construct" statt Klassenname usw.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/
Christoph Herrmann [ Do, 06 September 2007 19:45 ] [ ID #1814075 ]

Re: Referenz oder "false" zurückgeben

Am 6. September 2007 schrieb Konni Scheller:

> [...] und bei Bedarf das Gegurke mit PEAR loswerden (*das* Upgrade hat
> mich einige Zeit gekostet).

Darf man mehr erfahren? (Sowohl zum "Gegurke" als auch, warum das
Upgrade [wohin eigentlich?] einige Zeit gekostet hat.)

Gruß
Mark

--
Eduard Geyer: "Ich kann doch nicht schon die Aufstellung vom nächsten
Wochenende sagen. Der eine kriegt 'ne Grippe, beim anderen kriegt die
Oma einen Zahn."
Mark Wiesemann [ Do, 06 September 2007 21:46 ] [ ID #1814081 ]

Re: Referenz oder "false" zurückgeben

Mark Wiesemann <news [at] mark-wiesemann.de> wrote:

> Darf man mehr erfahren? (Sowohl zum "Gegurke" als auch, warum das
> Upgrade [wohin eigentlich?] einige Zeit gekostet hat.)

Weil die Teile, die verwendete, so alt waren, dass sie nichts mit PHP5
anfangen konnten. Einige Teile waren so alt, dass sie mit dem XML-Format
für das automatische upgrade nicht zurecht kamen. Und schon geht das
händische Installieren los.

Servus,
Konni


--
debs-meet 2007 am 07.-09. September
kscheller [ Fr, 07 September 2007 06:32 ] [ ID #1814997 ]

Re: Referenz oder "false" zurückgeben

Am 7. September 2007 schrieb Konni Scheller:

> Mark Wiesemann <news [at] mark-wiesemann.de> wrote:
>
>> Darf man mehr erfahren? (Sowohl zum "Gegurke" als auch, warum das
>> Upgrade [wohin eigentlich?] einige Zeit gekostet hat.)
>
> Weil die Teile, die verwendete, so alt waren, dass sie nichts mit PHP5
> anfangen konnten.

Hmm, ging es um E_STRICT-Fehlermeldungen? Die kann man ggf.
unterdrücken. Ansonsten wüsste ich nicht, welches Paket, unter PHP 5 im
Gegensatz zu PHP 4 nicht laufen würde. (Okay, eine Ausnahme fällt mir
ein: XML_XPath kann unter PHP 5 nicht mehr mit dem PEAR-Installer
installiert werden, aber es läuft trotzdem unter PHP 5.)

> Einige Teile waren so alt, dass sie mit dem XML-Format
> für das automatische upgrade nicht zurecht kamen. Und schon geht das
> händische Installieren los.

Da mag es helfen, den Update-Hinweis auf pear.php.net gelesen zu haben,
und schon hätte die Installation geklappt.

Gruß
Mark

--
Dariusz Wosz: "Ich möchte mich noch mal bei die Leute bedanken, die
hinter meinem Rücken gestanden haben."
Mark Wiesemann [ Fr, 07 September 2007 07:01 ] [ ID #1814998 ]

Re: Referenz oder "false" zurückgeben

Mark Wiesemann <news [at] mark-wiesemann.de> wrote:

> Ansonsten wüsste ich nicht, welches Paket, unter PHP 5 im
> Gegensatz zu PHP 4 nicht laufen würde.

Die waren *sehr* alt, meine Pakete.

> > Einige Teile waren so alt, dass sie mit dem XML-Format für das
> > automatische upgrade nicht zurecht kamen. Und schon geht das händische
> > Installieren los.
>
> Da mag es helfen, den Update-Hinweis auf pear.php.net gelesen zu haben,
> und schon hätte die Installation geklappt.

Nein, hätte sie nicht. Die open-source welt ist genauso wenig rosig wie
die von Microsoft. Es *sollte* , hat aber nicht.

Servus,
Konni

--
debs-meet 2007 am 07.-09. September
kscheller [ Fr, 07 September 2007 10:37 ] [ ID #1815028 ]

Re: Referenz oder "false" zurückgeben

Konni Scheller meinte:
> Christoph Herrmann <herrmann [at] dragonprojects.de> wrote:

>>> Mit dem kleinen Problem, dass es dann mit PHP4 nicht mehr läuft :-(
>> Muss es das?
>
> Das ist die Frage. Eigentlich nicht. Das "eigentlich" ist das Problem.
> Irgendwann könnte ein Fall auftreten, bei dem es noch auf PHP4 laufen
> muss. Andererseits ist das ein Argument, dass der Provider endlich ein
> Upgrade macht.

Na, wenn es *jetzt* noch nicht auftritt, wird es in Zukunft noch viel
unwahrscheinlicher sein.

Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Gregor Kofler [ Fr, 07 September 2007 15:18 ] [ ID #1815099 ]

Re: Referenz oder "false" zurückgeben

Claus Reibenstein meinte:
> Konni Scheller schrieb:
>
>> Christoph Herrmann <herrmann [at] dragonprojects.de> wrote:
>>
>>> Also einfach den Adressoperator wegmachen und freuen, dass
>>> es trotzdem genauso geht wie vorher mit.
>> Mit dem kleinen Problem, dass es dann mit PHP4 nicht mehr läuft :-(
>
> Du willst OO-Scripte schreiben, die sowohl unter PHP4 als auch unter
> PHP5 laufen? Vergiss es.
>
> Gerade im OO-Bereich hat sich Einiges getan, so dass es Dir wohl kaum
> gelingen wird, OO-Scripte zu schreiben, die unter beiden Versionen
> unverändert laufen. Zumindest nicht ohne erheblichen Mehraufwand.

Naja, man kann sich an PHP4 halten, das klappt dann in PHP5 zu 99%
ebenfalls. Man nutzt halt nur das rudimentäre OO-Konzept von PHP4, aber
klappen tut's. Demonstrieren ja abermillionen CMS Installationen, die so
ziemlich alle noch auf PHP4 (Joomla! wäre so ein Kanditat) sind, und
trotzdem ohne Murren auf PHP5 laufen.

Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Gregor Kofler [ Fr, 07 September 2007 15:25 ] [ ID #1815100 ]
PHP » de.comp.lang.php.misc » Referenz oder "false" zurückgeben

Vorheriges Thema: ist letzte Aktion nach Timeout und Relogin sinnvoll (umsetzbar)?
Nächstes Thema: session.save_path erlaubt nur "/tmp"