Logic ar fi să facă asta DOAR dacă specifici explicit ca x() primește ca argument o referință: function x(&$obj). În php doar obiectele au comportamentul ăsta, de exemplu array-urile cred că folosesc COW (copy-on-write), adică dacă modifici asupra lor, se crează instant o copie locală.
Exemplu:
function x($arr)
{
$arr[] = 'blublu';
}
function y()
{
$arr = [ 'blabla' ];
x($arr);
print_r($arr);
}
Rezultat, după cum se observă lipsește ‘blubu’:
(
[0] => blabla
)
Dar, dacă declarăm că x() primește referință, ghici ce…
function x(&$arr)
{
$arr[] = 'blublu';
}
[...]
Array
(
[0] => blabla
[1] => blublu
)