В общем вопрос. В php необязательно объявлять все переменные. Он на это ругаться не будет. (про php.ini знаю). Но по какому принципу объявлять или не объявлять переменные? От каких это факторов зависит?
Может я чего-то где-то недочитал, но просмторел много инфы и насчет этого ничего не нашел. Помогите плиз. Хочу начать проект на php (mvc) и без этого ние хочу начинать.
Заранее Спасибо.
Мелкий
Отправлено: 25 Октября, 2012 - 22:31:51
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
artsemi пишет:
Он на это ругаться не будет. (про php.ini знаю).
Вот и выставите E_ALL | E_STRICT и не используйте @.
До обращения к значению переменной, это значение должно быть присвоено. Вот и все факторы.
----- PostgreSQL DBA
artsemi
Отправлено: 25 Октября, 2012 - 22:37:11
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2012
Помог: 0 раз(а)
Нет, ну это понятно. Но вопрос не в этом.
Я хочу узнать почему одну переменную объявляют, а другую нет. Почему $variable объявлена, пусть даже она была бы публичной. это неважно, просто смотрел код многих скриптов и везде так. одна объявлена, а другая нет...
OrmaJever
Отправлено: 25 Октября, 2012 - 22:37:50
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
любая операция при которой берётся значение неопределёной(!!) переменой будет выдавать нотис (кроме функций isset и empty). (Добавление)
artsemi пишет:
Я хочу узнать почему одну переменную объявляют, а другую нет. Почему $variable объявлена, пусть даже она была бы публичной. это неважно, просто смотрел код многих скриптов и везде так. одна объявлена, а другая нет...
Все они обьявлены, просто в другом месте.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
artsemi
Отправлено: 25 Октября, 2012 - 22:40:27
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2012
Помог: 0 раз(а)
Цитата:
Все они обьявлены, просто в другом месте.
Это я знаю. А почему в коде одни переменные стоит объявлять а другие нет??? (Добавление)
Люди ну помогите плиз. Я в таком ступоре что ппц. Чувствую себя совершенно неуверенно из-за этой фигни. (Добавление)
Может я непонятно объяснил суть проблемы, так вы спросите что именно непонятно, объясню чего конкретно я хочу.
caballero
Отправлено: 25 Октября, 2012 - 22:58:54
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Люди ну помогите плиз. Я в таком ступоре что ппц. Чувствую себя совершенно неуверенно из-за этой фигни.
так не страдай фигней.
сначала определись что ты подразумеваешь под объявлением переменной.
По умолчанию будет иметь значение NULL.
Все неописанные свойства будут иметь атрибут public.
artsemi
Отправлено: 25 Октября, 2012 - 23:09:19
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2012
Помог: 0 раз(а)
Okula пишет:
Так это у тебя и так сделано
PHP:
скопировать код в буфер обмена
private $variable;
По умолчанию будет иметь значение NULL.
Все неописанные свойства будут иметь атрибут public.
Люди да я это все понимаю!!! Нежели я так непонятно объяснил чего я хочу...
Я хочу узнать, почему некоторые переменные нужно объявлять именно в коде! (делать их свойствами) а некоторые нет. у меня в примере есть еще вторая переменная которая не объявлена, но я её тоже могу объявить. а могу наоборот. По какому принципу работать? Какие мне объявлять, а какие нет? Как правильно? (Добавление)
Другими словами если, какие переменные делать свойствами класса, а какие нет.
OrmaJever
Отправлено: 25 Октября, 2012 - 23:16:13
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
artsemi пишет:
Определение её как свойства класса. Т.е. при помощи модификаторов доступа private, public, protected
То так всётаки делать не стоит
1) Таким образом свойство v будет всегда public
2) Если опеределить его в классе то ему можно задать начальное значение, если не задано то в любом случае будет null
3) если вы в выше приведёном коде уберёте строку $a->v = 1 то будет нотис т.к. вы пытаетесь вывести не определёную переменую, а если она будет опеределена в классе то нотиса не будет и выведет просто 0.
4) Это просто удобнее, когда вы смотрите класс вы всегда видите какие свойства у него есть и какой у них уровень доступа.
+5) ещё из за такого обращения неявно вызываются методы __set() и __get() что занимает лишнее время.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Okula
Отправлено: 25 Октября, 2012 - 23:17:25
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
artsemi, почитай про области видимости функций.
Мелкий
Отправлено: 25 Октября, 2012 - 23:17:39
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Первый вариант предпочтительнее в первую очередь потому, что документирует используемые публичные свойства.
Есть ещё определённые различия работы магических методов (__get, __set срабатывают только на не объявленные свойства), и, на сколько мне известно, во втором случае несколько выше потребление памяти.
----- PostgreSQL DBA
dubasua
Отправлено: 25 Октября, 2012 - 23:17:48
Посетитель
Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012
Помог: 7 раз(а)
У класса есть магические методы, такие как __construct(); __clone(); и тд.
Вот например __construct(); вызывается автоматом при создании нового объекта, __clone() вызывается автоматом при клонировании объекта, и для переменных тож есть магический метод, я просто не помню как он называется, то есть если переменной(свойства) в классе нет, то при его объявлении класс будет вызывать магический метод, если этого метода нет, ну если он не прописан, будет выполнятся действие по умолчанию.
Это например как при создании нового объекта
Сначала PHP ищет класс с названием "Class_name", если он его не находит, он запускает функцию __autoload($name)(кажется так, точно не помню), которую разработчик может написать сам, а если этой функции нет, только потом он выдает ошибку что класс не найден.
caballero
Отправлено: 25 Октября, 2012 - 23:19:36
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Другими словами если, какие переменные делать свойствами класса, а какие нет.
Какие надо такие и делать.
Если ты пишешь класс ты уже знаешь какие у него должны быть свойства.
Покинул форум
Сообщений всего: 16
Дата рег-ции: Окт. 2012
Помог: 0 раз(а)
Цитата:
Это просто удобнее, когда вы смотрите класс вы всегда видите какие свойства у него есть и какой у них уровень доступа.
А почему тогда все пишут по разному, т.е. я к тому что я не видел еще ни одного скрипта, где все переменные являются свойствами класса.
Всегда есть какие-то "левые" переменные.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.