Mailinglisten-Archive |
Hi Daniel,
On Tue, Dec 12, 2000 at 11:27:09AM +0100, Daniel Beulshausen wrote:
> At 02:07 12.12.2000 +0100, you wrote:
> >Die Implementierung als explizite "Referenz-Zuweisung" find'
> >ich etwas kurzsichtig. (Sonst reiten die Sprachentwickler
> >doch auch auf der C(++)-Welle, warum nicht hier auch?)
>
> & ist einfach kein operator, es gibt keine pointer wie in c. möglich ist:
ja, das hatte ich ja wohl auch festgestellt.
Ich moechte ja auch gar keine Pointer (baeh, baeh, baeh),
sondern nur die Moeglichkeit Referenzen als "first class Datentyp"
benutzen zu koennen. Man *muss* das nicht haben, aber es ist
in vielen Faellen sehr handlich.
> $foo1 =& $foo2
^^^^
Es gibt halt einen '=&'-Operator.
Das gemeine ist, dass im Handbuch die Schreibweise $foo = &$bar
verwendet wird, welche die Existenz eines Referenz-Operators "&"
vermuten laesst.
> function &foo();
*Wenn* Referenzen auch explizit benutzt werden koennten,
waere diese Sondersyntax nicht notwendig.
> function foo(&foo)
ok. call-by-reference; aber das gab's ja schon frueher
und gehoert IMHO nicht zum Kern der 'hier' diskutierten
Problematik.
>
> was imo auch völlig ausreichend ist :)
:) ... fuer geeignete Definitionen von ausreichend :)
> http://marc.theaimsgroup.com/?l=php-dev&m=97500895222948&w=2
> http://php.net/manual/language.references.php
ah, jetzt, ja: Updated Tue, 12 Dec 2000 <smile>
*So* aktuell ist unser lokaler Spiegel des Handbuchs
natuerlich nicht :)
Nach dieser Lektuere weiss ich nun aber zumindest
wie (und warum) die Entwickler diesen Weg verfolgt
haben. Wirklich gut finde ich das allerdings nicht,
da die Orthogonalitaet der PHP-Syntax darunter leidet.
Insbesondere die Notwendigkeit von
$foo =& pingpong();
mit &function pingpong(){[...]; return $bar;}
will mir einfach nicht wirklich einsichtig werden.
Das liegt aber wohl daran, dass ich mich an das
"Bind-by-name"-Konzept noch gewoehnen muss. (Echte Referenz
[nicht Pointer!] Semantik waere wir lieber ...)
Ich werde darueber nochmal meditieren muessen ;)
> ja, du hast recht. ich sehe gerade das der unterausdruck evaluiert wird,
> dann wäre der weg über if/else am "schönsten".
Aber genau if/then/else moechte man fuer so simple
Fallunterscheidungen ja vermeiden.
> >Wirklich aergerlich finde ich, dass somit (im Moment)
> >auch kein direktes "return &$myObject" moeglich ist.
> >Stattdessen muss man ein wenig elegantes
> >$tmp = &$myObject; return $tmp;
> >verwenden.
jau. Da hab' ich mich verrannt; voelliger Bloedsinn der Satz.
Kaum lag' ich kurze Zeit nach dem Verfassen der Mail im Bett,
fiel mir auf, was ich fuer einen Bloedsinn geschrieben hatte.
Diese Art der Referenz-Rueckgabe kann (bei aktueller Referenz-
Semantik) aus demselben Grund nicht funktionieren, wie auch
der "?"-Fall versagt.
$tmp enthaelt ja nicht die Referenz als Wert, sondern 'ist'
eine Referenz auf denselben Wert wie $myObject.
Sobald '$tmp' (im Rahmen des return-Statements) ausgewertet
wuerde, wuerde wieder eine echte Kopie des Objektes
zurueckgegeben.
Das hatten wir bei ersten Tests auch festgestellt und die
Rueckgabe von Referenzen damit zunaechst zu den Akten gelegt.
> lies nochmal http://php.net/manual/language.references.return.php
IIRC gab's das zur Zeit unserer ersten Referenz-Experiment
noch nicht. (Kann das sein oder wurde das alles 'gleichzeitig'
eingefuehrt?)
-Andreas
--
: Anti-Spam Petition: http://www.politik-digital.de/spam/ :
: PGP-Key: http://www.tse-online.de/~ab/public-key :
: Key fingerprint: 12 13 EF BC 22 DD F4 B6 3C 25 C9 06 DC D3 45 9B :
php::bar PHP Wiki - Listenarchive