Thread: PHP: Reference - &
-
21-04-2004, 22:30 #1Approved 9-lifer
- Registered
- 15/08/03
- Location
- Moorsele
- Posts
- 2,552
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
PHP: Reference - &
Wil er mij iemand uitleggen wat die "&" eigenlijk doet?
Het is eigenlijk geen toekenning aan de variable maar een verwijzing of zo..
BijPHP Code:<?php
$foo = 'Bob'; // Assign the value 'Bob' to $foo
$bar = &$foo; // Reference $foo via $bar.
$bar = "My name is $bar"; // Alter $bar...
echo $bar;
echo $foo; // $foo is altered too.
?>
is de output bij beide "My Name Is Bob"PHP Code:echo $bar;
echo $foo;
Als je de "&" weg doet krijg je bij
als output gewoon "Bob"..PHP Code:echo $foo;
Liefst een simpele uitleg... (Ben nog maar pas begonnen...)
Bron PhP.NetNintendo ID & PSN & Xbox Live & Steam: FiFtyEurono votes
-
-
21-04-2004, 22:33 #2Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
simpele uitleg:
$bar wordt hier gewoon als andere variabelenaam voor $foo gezien.
je kan dus zeggen dat $bar en $foo altijd in alle opzichten gelijk zijn
.
no votes
-
21-04-2004, 22:38 #3Approved 9-lifer
- Registered
- 15/08/03
- Location
- Moorsele
- Posts
- 2,552
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Zonder de "&" zouden ze gelijk zijn...
Nu is het een verwijzing die ik niet snap...
Die "&" maakt ook een verandering in $foo...
Want $foo is ook "My Name Is Bob" geworden..
Ps. De uitleg mag iets complexer zijn hoor..
Last edited by 50Euro; 21-04-2004 at 22:45.
Nintendo ID & PSN & Xbox Live & Steam: FiFtyEurono votes
-
21-04-2004, 22:46 #4Member
- Registered
- 18/11/02
- Location
- Eke, België
- Posts
- 2,448
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Ge moet een variabele eigenlijk zien als volgt:
naam die verwijst naar inhoud op een bepaald adres (adres in het computergeheugen)
de inhoud van de variabele $foo is dus bob, en zijn adres dat wordt intern bijgehouden en geaccocieerd met de variabelenaam.PHP Code:// vb1.
$foo = 'bob';
Over nu naar dat &-teken:
In expressie 1 gebeurt het volgende: de inhoud waar het adres van de variabele $foo naar verwijst wordt opgehaald en in een nieuwe adresruimte gestoken die geassocieerd wordt met $bar. (Er wordt als het ware een kopie genomen van de inhoud en in een nieuwe adresruimte gestoken.)PHP Code:// vb2.
// expressie 1
$bar = $foo;
// expressie 2
$bar = &$foo;
Kort:
$foo verwijst naar bepaalde adresruimte
$bar verwijst naar andere adresruimte met gelijkaardige inhoud (kopie)
---
In expressie 2 gebeurt ernet iets anders, in plaats van een kopie te nemen van de inhoud op de adresruimte van $foo, zorgt de &-operator ervoor dat ook de variabele $bar nu naar diezelfde adresruimte van $foo verwijst. Met andere woorden je creëert als het ware een alias voor de inhoud op de adresruimte voorheen geassocieerd met $bar.
Dit impliceert dus dat wanneer je iets via de ene variabele verandert en je output de andere variabele, dat via beide variabelen die wijziging zichtbaar zal zijn, aangezien ze naar hetzelfde verwijzen:
Kort:
$foo verwijst naar bepaalde adesruimte
$bar verwijst naar diezelfde adresruimte
(ze verwijzen dus naar exact dezelfde inhoud)
Hopelijk is het wat duidelijk.
Dit begrip is vergelijkbaar met een pointer (een verwijzing naar, het wijst naar, to point to)
Grtz,
dbLast edited by DarkBone; 21-04-2004 at 23:09.
no votes
-
21-04-2004, 22:49 #5Member
- Registered
- 18/11/02
- Location
- Eke, België
- Posts
- 2,448
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Trouwens, je mag gerust je threads laten staan hoor... andere mensen kunnen er nog uit leren (via gebruik van de search).
En ik doe tenslotte ook wat moeite dit telkens te typen
Thx.no votes
-
21-04-2004, 23:00 #6Approved 9-lifer
- Registered
- 15/08/03
- Location
- Moorsele
- Posts
- 2,552
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Je hebt gelijk... Ik zal ze laten staan.. Je kan hier nog iets van leren..
Dus door in dit voorbeeld "$bar" te wijzigen door onderstaande...
verander je "$foo" ook?PHP Code:$bar = "My name is $bar";
Kan je eens een voorbeeld geven waar men deze instructie vooral gebruikt?
M.a.w. waar is ze nuttig voor?
Bedankt voor al die moeite trouwens...Nintendo ID & PSN & Xbox Live & Steam: FiFtyEurono votes
-
21-04-2004, 23:07 #7Member
- Registered
- 18/11/02
- Location
- Eke, België
- Posts
- 2,448
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Klopt wat je zegt.
References worden vooral gebruikt bij het doorgeven van parameters aan functies, een functie ontvangt standaard altijd een kopie van de variabelen die je meegeeft. Indien je echter de variabele laat voorgaan door een &-teken, dan zal geen kopie worden meegegeven, maar een verwijzing naar de oorspronkelijke inhoud/variabele.
Ik neem als voorbeeld het verhogen van een waarde:
In bovenstaand voorbeeld zal de output 0 zijn.PHP Code:// voorbeeld 1
$count = 0;
addOne($count);
echo $count;
function addOne($count)
{
$count = $count + 1;
}
In bovenstaand voorbeeld zal de output echter NIET 0 zijn, maar 1 !!.PHP Code:// voorbeeld 2
$count = 0;
addOne($count);
echo $count;
function addOne(&$count)
{
$count = $count + 1;
}
Je bewerkt namelijk de oorspronkelijke variabele.
Duidelijk ?
ps: ik hoop dat je het stuk over functies al gelezen hebt
no votes
-
21-04-2004, 23:15 #8Member
- Registered
- 18/11/02
- Location
- Eke, België
- Posts
- 2,448
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Het is niet onmiddelijk het meest makkelijke begrip en het is lichtjes verschillend van pointers zoals we die kennen in C/C++ (de PHP manual gaat wat dieper in op de verschillen, maar wat meer programmatorisch inzicht is misschien vereist, nogal 'moeilijke' voorbeelden om vlot te begrijpen).
Niet van wakker liggen als je het niet onmiddelijk begrijpt, het staat wat ongelukkig zo hoog in de manual terwijl het toch een behoorlijk complex begrip is om zomaar van de eerste keer te snappen als je nog weinig ervaring/kennis hebt van php.
Het simpelste is gewoon om het te zien als een soort alias toekenning.
Grtz,
dbno votes
-
21-04-2004, 23:19 #9Approved 9-lifer
- Registered
- 15/08/03
- Location
- Moorsele
- Posts
- 2,552
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Dus zo kan je oneindig lang doorgaan zoals in mijn klein vb
Kan je trouwens een spatie zetten in een variable?PHP Code:<?php
$foo = '50Euro'; // Assign the value 'Bob' to $foo
$bar = &$foo; // Reference $foo via $bar.
$bar = "My name is $foo"; // Alter $bar...
$bar = "Nu lees je dit! $foo";
echo "<hr>";
echo $bar;
echo "<hr>";
echo $foo; // $foo is altered too.
?>
Werkt niet...PHP Code:$bar = "My name is $foo<br>";
Functions????
Al eens snel gelezen maar nog niet echt in verdiept(zoals in veel dingen van PHP)...
Nintendo ID & PSN & Xbox Live & Steam: FiFtyEurono votes
-
21-04-2004, 23:24 #10Member
- Registered
- 18/11/02
- Location
- Eke, België
- Posts
- 2,448
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Hmmm... nog niet zo slecht gezien, je zou inderdaad denken dat $foo zichzelf oneindig blijft ophalen, maar dat gebeurt dus niet.
*edit*
Bij nader inzien toch volkomen logisch
Was even verward.
Voordat de toekenning gebeurt wordt $foo namelijk vervangen door zijn waarde op dat moment (toekenning isnog niet gebeurt, dus dat is nog steeds 'My name is 50Euro').PHP Code:$bar = "Nu lees je dit! $foo";
Dus wordt dat dan: 'Nu lees je dit! My name is 50Euro'Last edited by DarkBone; 21-04-2004 at 23:31.
no votes
-
22-04-2004, 18:52 #11Member
- Registered
- 12/10/02
- Location
- mars
- Posts
- 14,319
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
(had geen tijd om volgende replies te lezen)Originally posted by 50Euro
Zonder de "&" zouden ze gelijk zijn...
foute stelling
als je hebt
$foo = $bar;
dan ken je de waarde van bar toe aan foo, waardoor de inhoud nu wel hetzelfde wordt, maar de variabelen niet hetzelfde zijn.
met $foo = &$bar; Zorg je ervoor dat deze vars volledig hetzelfde zijn, ze verwijzen constant naar dezelfde plaats waar deze waarde is opgeslaan.
is de werkende syntaxis normaal gezien.PHP Code:$bar = "My name is {$foo}<br>";
no votes
-
22-04-2004, 19:30 #12Approved 9-lifer
- Registered
- 15/08/03
- Location
- Moorsele
- Posts
- 2,552
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Output:PHP Code:<?php
function test_global_ref() {
global $obj;
$obj = &new stdclass;
}
function test_global_noref() {
global $obj;
$obj = new stdclass;
}
test_global_ref();
var_dump($obj);
echo '<hr>';
test_global_noref();
var_dump($obj);
?>Waarvoor staat stdclass?NULL
--------------------------------------------------------------------------------
object(stdClass)(0) { }Nintendo ID & PSN & Xbox Live & Steam: FiFtyEurono votes
-
22-04-2004, 21:00 #13Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
Waarom lees je de documentatie op de PHP site niet?Originally posted by 50Euro
Waarvoor staat stdclass?
http://be2.php.net/language.types.objectPSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes
-
22-04-2004, 21:23 #14Approved 9-lifer
- Registered
- 15/08/03
- Location
- Moorsele
- Posts
- 2,552
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Ik snap eigenlijk nog niet zoveel hoor.
Ben gisteren pas effectief begonnen met PHP.
Ik krijg er soms koppijn van en ken de basis nog niet!
Wat is nu eigenlijk een class en een object?
Wat doen volgende voorbeelden?
Bron PHP.NETObjects
Object Initialization
To initialize an object, you use the new statement to instantiate the object to a variable.
PHP Code:<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}
$bar = new foo;
$bar->do_foo();
?>
For a full discussion, please read the section Classes and Objects.
Converting to object
If an object is converted to an object, it is not modified. If a value of any other type is converted to an object, a new instance of the stdClass built in class is created. If the value was null, the new instance will be empty. For any other value, a member variable named scalar will contain the value.
PHP Code:<?php
$obj = (object) 'ciao';
echo $obj->scalar; // outputs 'ciao'
?>Nintendo ID & PSN & Xbox Live & Steam: FiFtyEurono votes
-
22-04-2004, 23:29 #15Approved 9-lifer
- Registered
- 25/07/02
- Location
- Aalst
- Posts
- 13,457
- iTrader
- 6 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/156
ge wilt alles veel te snel ineenekeer doen
leer eerst wa me vars werken
leer dan if'en en while'en enzo
leer dan functies
classes en objecten hebt ge ni nodig voor de meeste dignen, hou u daar ni mee bezig (zeker ni op uwen 2en dag)
etc...
zoek nen tutorial da begint me 'hello world' en dan opbouwtsafir Thom4sno votes
