<?php
function copy_increment($int) {
$int++;
}
function reference_increment(&$int) {
$int++;
}
function object_increment($object) {
$object->int++;
}
function maybe_destroy($object) {
}
$object = new StdClass();
$object->int = 1;
$int_val = 1;
copy_increment($int_val); // Not passed by reference
reference_increment($int_val); // Passed by reference
object_increment($object); // Always passed by reference
// But here you can see that the parameters are
// still copies, but copies of the pointer and
// un-setting only effects the current scope.
maybe_destroy($object);
PD9waHAKCmZ1bmN0aW9uIGNvcHlfaW5jcmVtZW50KCRpbnQpIHsKICAgICRpbnQrKzsKfQoKZnVuY3Rpb24gcmVmZXJlbmNlX2luY3JlbWVudCgmJGludCkgewogICAgJGludCsrOwp9CgpmdW5jdGlvbiBvYmplY3RfaW5jcmVtZW50KCRvYmplY3QpIHsKICAgICRvYmplY3QtPmludCsrOwp9CgpmdW5jdGlvbiBtYXliZV9kZXN0cm95KCRvYmplY3QpIHsKICAgIHVuc2V0KCRvYmplY3QpOwp9Cgokb2JqZWN0ID0gbmV3IFN0ZENsYXNzKCk7CiRvYmplY3QtPmludCA9IDE7CiRpbnRfdmFsID0gMTsKCnZhcl9kdW1wKCRpbnRfdmFsKTsgLy8gMQoKY29weV9pbmNyZW1lbnQoJGludF92YWwpOyAgLy8gTm90IHBhc3NlZCBieSByZWZlcmVuY2UKCnZhcl9kdW1wKCRpbnRfdmFsKTsgLy8gMQoKcmVmZXJlbmNlX2luY3JlbWVudCgkaW50X3ZhbCk7IC8vIFBhc3NlZCBieSByZWZlcmVuY2UKCnZhcl9kdW1wKCRpbnRfdmFsKTsgLy8gMgoKdmFyX2R1bXAoJG9iamVjdCk7IC8vIGludCA9IDEKCm9iamVjdF9pbmNyZW1lbnQoJG9iamVjdCk7IC8vIEFsd2F5cyBwYXNzZWQgYnkgcmVmZXJlbmNlCgp2YXJfZHVtcCgkb2JqZWN0KTsgLy8gaW50ID0gMgoKLy8gQnV0IGhlcmUgeW91IGNhbiBzZWUgdGhhdCB0aGUgcGFyYW1ldGVycyBhcmUKLy8gc3RpbGwgY29waWVzLCBidXQgY29waWVzIG9mIHRoZSBwb2ludGVyIGFuZCAKLy8gdW4tc2V0dGluZyBvbmx5IGVmZmVjdHMgdGhlIGN1cnJlbnQgc2NvcGUuCm1heWJlX2Rlc3Ryb3koJG9iamVjdCk7IAoKdmFyX2R1bXAoJG9iamVjdCk7IC8vIGludCA9IDI=