phpbar.de logo

Mailinglisten-Archive

[php] Warum nicht: $bar = (3 == $foo) ? &$foo : &$foo ?

[php] Warum nicht: $bar = (3 == $foo) ? &$foo : &$foo ?

Andreas Braukmann braukmann_(at)_tse-online.de
Tue, 12 Dec 2000 18:46:53 +0100


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