Из справки про define: Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется. Если параметр value опущен, переменная инициализируется нулем.
Вообще define нужен только в некоторых случаях, когда нужно присвоить значение переменной единожды, а далее она меняется в процессе работы скрипта.
Я для того эту тему создал чтоб понять, насколько в кликермане работает динамическая типизация и объявление переменных. Заметил несколько особенностей:
- аргументы подпрограмм уничтожаются после выполнения подпрограммы (даже глобальные переменные с такими же именами уничтожаются и обнуляются, обойти можно если использовать уникальные имена аргументов для каждой подпрограммы)
- переменные, передаваемые в подпрограммы в качестве аргументов, остаются при этом в порядке (если не имели такого же имени, как и аргумент подпрограммы)
- нет никакой разницы между $x = 5 и define($x), setvar("$x",5)
- а так же, прикольчики типа:
sub(one)
$x = 5
$y = 1
end_sub
sub(two)
$x = 10
$y = "привет"
end_sub
logclear()
logshow(1)
print($x, " ", $y*3) // 0 0
one()
print($x, " ", $y*3) // 5 3
two()
strseparate($y, "и",$res)
print($x, " ", $res[0]) // 10 пр
halt()
Mission accomplished