[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание переменной заранее
Страницы: 1, 2
sendxt
Всем привет, вот мучает меня вопрос по поводу создания переменной за рание, надо ли, если да то зачем , какая разница?

вот пример что я имею ввиду:


$pupilIds = array();
foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}


или так , есть ли разница? просто много где вижу по коду, создают сначало переменные а потом что-то в них кладут, но работает и так и так)


foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}

dvs
Пропиши в .htaccess такую строчку:
php_value display_errors On


И увидишь разницу
Invis1ble
Цитата (dvs @ 21.08.2015 - 10:06)
Пропиши в .htaccess такую строчку:
php_value display_errors On


И увидишь разницу

и какая же ошибка будет показана для данного кода?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Invis1ble
Цитата (sendxt @ 21.08.2015 - 10:03)
есть ли разница?

разница будет, если $pupilIds использовалась ранее в том же скоупе.
Явная инициализация - правило хорошего тона. Помогает избежать случайных ошибок, особенно на стадии рефакторинга.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

dvs
Цитата (Invis1ble @ 21.08.2015 - 07:11)
и какая же ошибка будет показана для данного кода?

Notice разве не будет))) Проверил уже, сорри. Сам так пишу оказывается без объявления переменной.
dvs
Цитата (Invis1ble @ 21.08.2015 - 07:14)
Явная инициализация - правило хорошего тона. Помогает избежать случайных ошибок, особенно на стадии рефакторинга.

Согласен, подскажи по моей теме пожалуйста
sendxt
значит стоит за рание обьявлять, спасибо за разьяснения )
icedfox
Цитата (sendxt @ 21.08.2015 - 13:03)
есть ли разница?

Принципиальной разницы нет. Объявляя переменную вы сразу ее приводите к типу, который планируете использовать.
Через год, посмотрев на этот код, у вас не возникнет вопросов зачем и что это.

Лично мне больше нравится вот так
$aPupilIds = array(); // массив
$oPupilIds = new pupilIds(); // объект
$bPupilIds = true; // булево
$nPupilIds = 1; // цифровые
// и т.д.

Обучаюсь кодингу сам, подглядываю, кто и как делает, делая для себя выводы. Само документированный код + комменты к нему, это самое удобная реализация. В такой код ели даже через 5 лет залезешь, не потребуется тратить часы на мучительный разбор ;)
sergeiss
Цитата (sendxt @ 21.08.2015 - 11:03)
или так , есть ли разница?

Лучше сразу делать хорошо smile.gif Как гласит народная мудрость "старайся делать хорошо, а плохо само получится".

Дело в том, что в других языках, в том же JS, зачастую ты можешь получить ошибку, если не объявил переменную заранее. По крайней мере, если у тебя в скрипте будет написано 'use strict'.

Так что лучше сразу выработать "правила хорошего тона". Это как и стиль формирования кода: на работу кода может и не повлияет, но потом (для поддержки кода) может оказаться очень значимым.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
stump
$pupilIds = array();
foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}


Например $pupils = [].

тогда:
$pupilIds = array();
foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}
print_r($pupilIds);

Выведет Array()
а в случае:
foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}
print_r($pupilIds);

Не выведет ничего потому что $pupilIds равен NULL.
Разница в то, что когда код составлен логически верно тогда результат гарантированно предсказуем чего не скажешь в других случаях.
К примеру есть функция :
function foo(array $bar)
{
//something do here
}


тогда код
$pupilIds = array();
foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}
foo($pupilIds);

будет корректен чего не скажешь про код

foreach ($pupils as $pId => $pArr) {
$pupilIds[] = $pupils[$pId]['ID'];
}
foo($pupilIds);

Который при $pupilIds = NULL вернет fatal error.

_____________
Трус не играет в хокей
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.