Olen miettinyt PHP:n oliomallista erästä asiaa... Javassahan on olemassa kahden laisia tietotyyppejä: primitiivisiä tyyppejä sekä viittaustyyppejä. Se, mikä minua kiinnostaisi tietää on se, että onko PHP:n oliomallissa käytetty samanlaista ratkaisua kuin Javassa eli viittaustyyppien kohdalla muuttujassa on vain viite varsinaiseen olioon ja taas varsinainen olio sijaitsee jossain muualla muistialueella, vai samanlaista ratkaisua kuin C++:ssa, eli varsinainen olio sijaitsee myös itse muuttujan sisällä... Itse epäilisin tuota C++:ssan ratkaisua, mutta koska en ole asiasta täysin varma, niin halusin vielä varmistaa sen...
Missäköhän yhteydessä sillä on mitään merkitystä? PHP:ssä et voi kuitenkaan hypistellä muistialueita eikä siellä pysty harjoittamaan pointteriaritmetiikkaa. Edes muuttujan osoitetta ei taida olla mahdollista saada selville PHP:llä itsellään.
Ottaen huomioon, että PHP:ssa ei voi määritellä muuttujan tietotyyppiä, ja toisaalta muuttujia voi määritellä ja poistaa lennossa, niin muuttujien täytyy olla jonkinlainen sanakirja, josta on viittaukset varsinaisiin tietoihin.
Näyttää siltä, että jopa ihan perustyypit on viittauksia. Esim. seuraavan tulos on mielenkiintoinen:
<? $joo = 7; debug_zval_dump($joo) ?>
Tämä voisi selventää asiaa: https://www.php.net/manual/en/language.oop5.
Grez, käsititkö ehkä kysymyksen väärin? Asiallahan on merkitystä jo yksinkertaisessa sijoituksessa $a = $b;
Triton, toimii kuten Javassa, eikö tullut mieleen kokeilla?
class A { public $x = 0; } $a = new A(); $a->x = 1; $b = $a; $b->x = 2; echo $a->x, $b->x; // 22
Myös tavallisiin muuttujiin saa viittauksia ("aliaksia") &-merkillä hieman kuten C++-kielessäkin. Niitä käyttäessä kannattaa pitää visusti huoli, että kyseisen aliasmuuttujan näkyvyysalue loppuu pian tai että se poistetaan unset-komennolla.
Metabolix kirjoitti:
Grez, käsititkö ehkä kysymyksen väärin? Asiallahan on merkitystä jo yksinkertaisessa sijoituksessa $a = $b;
No joo, siinä puhuttiin olion olemisesta muuttujan sisällä, jonka ajattelisin tarkoittavan sitä, että varataan valmiiksi muistia olion tarvetta ajatellen samoin kuin varattaisiin C:ssä vaikka int -tyypille. Ja lisäksi puhuttiin muistialueista. Eli mielestäni joko kysymys oli sekavasti kirjoitettu tai siinä kysyttiin miten kielet "sisäisesti" toimii, eikä sitä miten ne käyttäjän kannalta toimii.
Toki jos ymmärtää kysymyksen niin, että kysytään miten se toimii käyttäjän kannalta, niin kysymyksessä on enemmän järkeä.
Metabolix kirjoitti:
Triton, toimii kuten Javassa, eikö tullut mieleen kokeilla
Niin no kyllähän se olisi tosiaan kokeilemalla selvinnyt :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.