[PHP] Objecten & references

Pagina: 1
Acties:

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 03-09 17:11

GraasGast

Analogue Heaven

Topicstarter
Na wat geëxperimenteerd te hebben en goed de manual te hebben gelezen ben ik tot het volgende gekomen:
PHP:
1
<?$a = new theClass;?>

In dit stukje code word een nieuw object van theClass aangemaakt. Een kopie van dat object word toegekend aan $a.

Er zijn dan dus 2 objecten, het orgineel en de kopie in $a.
PHP:
1
<?$a =&amp; new theClass;?>

Het verschil met het vorige is dat nu geen kopie van het nieuwe object aan $a gegeven word, maar $a word een reference naar het orginele object.

In dit geval is er dus maar 1 object, het orgineel, en $a verwijst daarnaar.

De 2e manier lijkt me dus veel efficienter wat load en geheugengebruik betreft.

Kan iemand me vertellen waarom de 2e manier niet altijd gebruikt word, en wat het nut is van constructie #1?
de manual is daar niet echt duidelijk in, daar worden alleen de voordelen van manier 2 uitgelegd:
Note: Not using the & operator causes a copy of the object to be made. If you use $this in the class it will operate on the current instance of the class. The assignment without & will copy the instance (i.e. the object) and $this will operate on the copy, which is not always what is desired. Usually you want to have a single instance to work with, due to performance and memory consumption issues.
Nog een klein puntje:
Wat is nou de officiële notatie van een reference?
PHP:
1
<?$a =&amp; $b;?>

als zijnde een assignment operator, of
PHP:
1
<?$a = &amp;$b;?>

als een operator prefix?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Ik denk (weet het dus niet zeker) dat het bij classes niet echt uitmaakt. Volgens mij wordt er bij classes gewoon een pointer toegekent en is het daarom waarschijnlijk al een reference.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Grum
  • Registratie: Juni 2001
  • Niet online
PHP maakt(e) default overal copies van. Ik meen dat ze oa bij het instantieren van objecten dit hebben afgeschaft .. not sure though (mag je zelf ff opzoeken :D)

Er zijn 3 plekken waar jij in php met '&' werkt als het references betreft nl:

1/ function &Functienaam(....) {};
2/ function Functienaam( &$outVar, ... ) {};
3/ $nonCopy =& $theOriginal; of $nonCopy = &$theOriginal; (zit meen ik geen verschil tussen)

1/ Functie die een reference returned: http://php.net/references.return
2/ Functie die een reference mee krijgt: http://php.net/references.pass
3/ Geen kopie maar een reference naar een variabele

Verwijderd

code:
1
2
3
4
5
& $class
en
&$class
en
&    $class

Zijn allemaal hetzelfde, de mooiste notatie is &$class;

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 03-09 17:11

GraasGast

Analogue Heaven

Topicstarter
Op maandag 13 mei 2002 11:45 schreef Grum het volgende:
PHP maakt(e) default overal copies van. Ik meen dat ze oa bij het instantieren van objecten dit hebben afgeschaft .. not sure though (mag je zelf ff opzoeken :D)
[..]
volgens het stukje manual wat ik gequote heb is dat niet zo:
Note: Not using the & operator causes a copy of the object to be made. If you use $this in the class it will operate on the current instance of the class. The assignment without & will copy the instance (i.e. the object) and $this will operate on the copy, which is not always what is desired. Usually you want to have a single instance to work with, due to performance and memory consumption issues.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Jorrit: en dit dan:

$theVar1 & $theVar2; ? >:)

GraasGast: Dan is php tenminste nog ergens consistent mee ;)

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

In PHP 5 wordt elk object ook een reference, zoals dit bijvoorbeeld ook in Java het geval is.

Rustacean


  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 03-09 17:11

GraasGast

Analogue Heaven

Topicstarter
Op maandag 13 mei 2002 11:46 schreef Jorrit het volgende:
code:
1
2
3
4
5
& $class
en
&$class
en
&    $class

Zijn allemaal hetzelfde, de mooiste notatie is &$class;
het heeft allebij z'n charme denk ik, maar als asignment operator vind ik hem toch mooier stiekum :)
code:
1
2
3
$a = &$class; //noncopy operator prefix
en
$a =& $class; //noncopy asignment operator

hoewel voor de prefix ook wat te zeggen is natuurlijk, want het is dan wat consequenter samen met passing by reference en returning references.

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 03-09 17:11

GraasGast

Analogue Heaven

Topicstarter
Op maandag 13 mei 2002 11:53 schreef Manuzhai het volgende:
In PHP 5 wordt elk object ook een reference, zoals dit bijvoorbeeld ook in Java het geval is.
* GraasGast zegt: yesss! :)

edit: is er al wat bekend over de releasedate van php5?

  • Grum
  • Registratie: Juni 2001
  • Niet online
When it's finished (of 'When it compiles' :D)

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 22:46

TheDane

1.618

@ GraasGast:

oh oh

we hebben ongeveer dezelfde implementatie voor onze dynamische ondertitels / siggies :X

  • Grum
  • Registratie: Juni 2001
  • Niet online
TheDane: @ GraasGast: oh oh

we hebben ongeveer dezelfde implementatie voor onze dynamische ondertitels / siggies :X


heerlijk offtopic .. maarja .. hoe wil je het anders doen dan ? naast een browsie emuleren ?

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 22:46

TheDane

1.618

Op maandag 13 mei 2002 12:01 schreef Grum het volgende:
TheDane: @ GraasGast: oh oh

we hebben ongeveer dezelfde implementatie voor onze dynamische ondertitels / siggies :X


heerlijk offtopic .. maarja .. hoe wil je het anders doen dan ? naast een browsie emuleren ?
sorry voor offtopic :)

maar ik bedoel dat we allebei 'tzelfde idee hadden -> dan weer teller in sig, dan weer in title + datumpje erbij ,.

that's all

  • GraasGast
  • Registratie: Oktober 2000
  • Laatst online: 03-09 17:11

GraasGast

Analogue Heaven

Topicstarter
Op maandag 13 mei 2002 11:59 schreef TheDane het volgende:
@ GraasGast:

oh oh

we hebben ongeveer dezelfde implementatie voor onze dynamische ondertitels / siggies :X
ghehe lol, inderdaad...mja ik heb het al een half jaar ofzo :7

mja, weer ontopic nu :)
Pagina: 1