سلام و روز خوش
شما باید به scope دقت کنین:
در تکه کد اول وقتی echo $a اجرا میشه چون a$ تعریف نشده باید خطا بگیره و اگر از یک IDE برای کدنویسی استفاده کرده باشین حتما اینو گوشزد میکنه.
درستش اینجوریه:
<?php
$a = 'initial value';
var_dump($a);
salam();
var_dump($a);
function salam()
{
global $a;
$a = 'value set in salam function';
}
که خروجیش این میشه:
string(4) "abcd"
string(27) "value set in salam function"
دلیل این که تکه کد دوم بدون خطا اجرا میشه اینه که اونجا a$ در درون تابع salam گلوبال تعریف میشه،
وگرنه بدون اون این کد هم روی echo $a خطا میگیره.