Symbianize Forum

Most of our features and services are available only to members, so we encourage you to login or register a new account. Registration is free, fast and simple. You only need to provide a valid email. Being a member you'll gain access to all member forums and features, post a message to ask question or provide answer, and share or find resources related to mobile phones, tablets, computers, game consoles, and multimedia.

All that and more, so what are you waiting for, click the register button and join us now! Ito ang website na ginawa ng pinoy para sa pinoy!

PHP Reference symbol (&) in Layman's Term

koyaemz

Recruit
Basic Member
Messages
5
Reaction score
0
Points
16
Hi guys,

Sorry di ko kasi ma-gets yung reference symbol sa PHP. Nahihirapan akong intindihin.

Sana ma-explain nyo sakin in Filipino at in Layman's term. Medyo di nagwo-work brain ko ngayon hahahaha.

Thank you.
 
Try this code.

Code:
<?php
class Foo {
	public $value = 5;
}

$foo = new Foo;
$by_value = $foo->value;
$by_ref =& $foo->value;

$foo->value = 10;

echo $by_value . ' ' . $by_ref;
?>

Makikita mo na "5 10" ang result niyan. Kasi kapag nagcopy ka ng 'by value' lang, yung initial value lang makukuha mo regardless na may changes sa variable later on. Pero kapag by reference, yung variable na ginawa mo, magpopoint mismo dun sa same memory address nung variable na pinagkunan mo.

Try mong i-add to dun sa code sa taas

Code:
$by_ref = 20;

echo $foo->value;

Ano sa tingin mo ang result? :)
 
Hi guys,

Sorry di ko kasi ma-gets yung reference symbol sa PHP. Nahihirapan akong intindihin.

Sana ma-explain nyo sakin in Filipino at in Layman's term. Medyo di nagwo-work brain ko ngayon hahahaha.

Thank you.

Ito na yung pinaka-basic explanation na nakita ko for an online answer.
Passing a value by reference

Take this 2 examples
Code:
	<?php
		$x = 5;
		
		// passing a variable BY VALUE
		function changeValue($r){
			$r = $r * 3;
			return $r;
		}
		
		echo changeValue($x) . ' - ' . $x;
	?>
Result: 15 - 5

Code:
	<?php
		$x = 5;
		
		// passing a variable BY REFERENCE
		function changeValue(&$r){
			$r = $r * 3;
			return $r;
		}
		
		echo changeValue($x) . ' - ' . $x;
	?>
Result: 15 - 15

Explanation: By default, any variable inside a function is just a local variable. Also, any variable passed on to a function is only good for that function and that specific iteration. Any operations na daanan ng variable na iyon, ay hanggang doon lang ang effect, at ang original variable na nasa labas ng function ay unaffected.

Whereas, sa mga variables passed on to a function BY REFERENCE, ay affected din ang original variable na nasa labas.

Based dun sa sample codes, ang original value natin ay $x na may value na 5.

Sa first example, iyan yung usual natin ginagawa, pinapasa ang value ng isang variable sa loob ng function.
Sa second, ang ipinapasa natin sa loob ng function ay yung mismong variable.

Same lang ang operation na nasa loob ng function, get the variable, multiply it by 3, then return the value for output.

Sa first example, yung value ng variable natin (5), multiplied by 3, ang sagot ay 15. Kaya ang result ay: 15 - 5. Unaffected ang value ng original variable $x, 5 pa din.
Sa second, yung mismong variable $x (5) ang ipinapasa natin, multiplied by 3, ang sagot ay 15. Since ang nakalagay sa function ay $r = $r * 3, at ang $r refers to the original variable $x, ang magiging bagong value ng $x ay 15. Kaya ang result ay 15 - 15. Affected ang original value ng $x.
 
Try this code.

Code:
<?php
class Foo {
	public $value = 5;
}

$foo = new Foo;
$by_value = $foo->value;
$by_ref =& $foo->value;

$foo->value = 10;

echo $by_value . ' ' . $by_ref;
?>

Makikita mo na "5 10" ang result niyan. Kasi kapag nagcopy ka ng 'by value' lang, yung initial value lang makukuha mo regardless na may changes sa variable later on. Pero kapag by reference, yung variable na ginawa mo, magpopoint mismo dun sa same memory address nung variable na pinagkunan mo.

Try mong i-add to dun sa code sa taas

Code:
$by_ref = 20;

echo $foo->value;

Ano sa tingin mo ang result? :)


Mukang naiintindihan ko na. Meaning to say, if nag-pass ako sa variable ng isa pang variable by reference, i-po-point nya lang sa original variable (tama ba? hahaha)

Kasi sinubukan ko yung instructions mo, then dun sa second code nakakuha ako ng 20. Kasi since minodify ko si $by_ref, na-affect din si $foo->value

Sana may sense yung sinabi ko hahahaha
 
Mukang naiintindihan ko na. Meaning to say, if nag-pass ako sa variable ng isa pang variable by reference, i-po-point nya lang sa original variable (tama ba? hahaha)

Kasi sinubukan ko yung instructions mo, then dun sa second code nakakuha ako ng 20. Kasi since minodify ko si $by_ref, na-affect din si $foo->value

Sana may sense yung sinabi ko hahahaha

Yes! Tama ka. Same din ang behavior kapag ipapass mo sa function.
 
Back
Top Bottom