1.php: PHP: <?php $count = 3; $z[0] = 'enot'; $z[1] = 'krot'; $z[2] = 'kot'; function test() { echo $count; echo "<br>"; echo $z[2]; echo "<br>"; echo $z[0]; echo "<br>"; } ?> 2. php PHP: <?php include '1.php'; test() ?> Переходим на 2.php и переменная $count вообще не видна И $z выдает вообще неверную информацию. Что за бред с этим php?
Переменные $count и $z - глобальные, для доступа к глобальным переменным внутри функции существует инструкция global. Читайте мат. часть, прежде чем писать. И работайте с включёнными ошибками - код должен был нотисы плюнуть --- Добавлено --- Вот такие:
Я программист на другом языке, мне главное основы тут уловить и синтаксис, с логикой в порядке. Спасибо большое, получилось.
@schmidt это хорошо что программист на другом языке. Тогда тебе наверное известно, что можно открыть мануал и ознакомиться с основами языка перед тем как начинать на нем писать код. Очень помогает. Сам так делаю иногда.
@Ganzal, например? (мну правда интересно на каком стеке нужно специализироваться, что мысль об областях видимости даже не пришла в голову)
@romach языки разные и подход к переменным у каждого может быть свой. Например, напиши мне на ждаваскрипте циклом с таймаутом в 100 вывод чисел от 1 до 5 в консоль.
ненавижу джаваскрипт ) в цикле, да ещё и с таймаутом, ну например вот так: Код (Javascript): for(let i = 1; i <=5; i++) { setTimeout(function(i) { console.log(i); }.bind(this, i), i * 100); }
Ну видишь. Сразу и let и bind. А зачем, если по логике ты создаешь функцию, в которой по идее своя собственная область видимости? Да еще и таймаут её должен вырвать из текущего контекста. Вот тебе и пример того насколько разные могут быть подходы к переменным в языках.
Подходы разные, не спорю: Код (Javascript): // 6,6,6,6,6 let x; for(x = 1; x <=5;x++) { setTimeout(function() { console.log(x); }.bind(this), x * 100); } // 1, 2, 3, 4, 5 for(let y = 1; y <=5; y++) { setTimeout(function() { console.log(y); }.bind(this), 500 + y * 100); } // 6,6,6,6,6 for(var z = 1; z <=5;z++) { setTimeout(function() { console.log(z); }.bind(this), 1000 + z * 100); } // 1, 2, 3, 4, 5 for(var a = 1; a <= 5; a++) { setTimeout(function(a) { console.log(a); }.bind(this, a), 1500 + a * 100); } Но области видимости то есть. Когда ты в новом для себя языке объявляешь переменную, которую из другого места не видно, что первое придет тебе в голову? Вот мну и стало интересно, что за язык такой.
@romach, человека смутило, что php особенный, и в нём надо не локальные переменные объявлять, как в большинстве языков, а указывать в функции используемые глобальные. В принципе, переменные в PHP - первое, что смущает при переходе с других языков. Сам до PHP писал на Pascal и C++ (правда, не профессионально), и первое время привыкал, что у меня теперь переменные без типов.