ООП : опрос + флуд

betik

Новичок
Crazy
Да. Лучше когда по умолчанию переменные внешние не видны и для того чтобы их увидеть нужно использовать global, нежели когда по умолчанию переменные внешние видны внутри ф-ии, а для того чтобы их не видеть нужно использовать некое ключ. слово, например Unglobal какой-нть...
 

fixxxer

К.О.
Партнер клуба
betik, я не совсем понимаю, как ты себе представляешь
по умолчанию переменные внешние видны внутри ф-ии
в языке, не требующем явного объявления переменных. :)
 

betik

Новичок
$i=100;

function bred()
{
echo $i;
}

bred();


Если бы этот кусок кода выводил бы "100", то это было бы плохо.
 

SiMM

Новичок
> Если бы этот кусок кода выводил бы "100", то это было бы плохо.
"в языке, не требующем явного объявления переменных" это было бы по крайней мере нелогичным.
И, кстати говоря, при чём тут ООП?
 

betik

Новичок
Тем не менее это было бы плохо.
Да, кстати... При чём тут ООП?
 

Crazy

Developer
Автор оригинала: betik
Да. Лучше когда по умолчанию переменные внешние не видны
Без оговорок, please. Ты в данной дискуссии говоря о глобалах имел в виду только и исключительно использование данного ключевого слова и твои высказывания не имеют никакого отношения к практике использования глобальных переменных как таковых? Да или нет?
 

neko

tеam neko
fixxxer
> Автоматический доступ к глобальным переменным изнутри функции, как это сделано в Си - да, было бы хуже.
в c однако есть static, это сильно упрощает процесс
 

ONK

Пассивист PHPСluba
В пхп однако тоже есть static, причём он работает также как в Си.
 

betik

Новичок
Crazy, к чьей практике.. Моей? Твоей? Всеобщей? или кого... Какие именно высказывания(конкретно)?
____
Я же уже сказал, что в своих функциях я СЕЙЧАС пользуюсь глобалом только для получения префикса таблиц БД.. Потому что мне лень его прописывать параметром во все ф-ии.
Когда дело касается использование чужих функций, особенно больших и хитрых, при модернизации ф-ии я практически всегда использую глобал.. заведомо хитрожопоназванных переменных типа $_betaks_array2005... Хотя м.б. этот подход не правильный.
 

ONK

Пассивист PHPСluba
betik, твои аргументы выглядят крайне слабо. Однако я немного помогу тебе.

Глобальные переменные несомненно необходимы. Если есть некая сущность используемая большинством функций (методов классов) скрипта, или эта сущность по своей сути глобальна, то совершенно логичным является размещение такой переменной в глобальном пространстве имён.
Простые примеры:
$CONFIG - массив конфигурационных параметров
$oDb - объект абстрактного доступа к базе данных
$oUser - объект пользовательской сессии
$oTmpl - объект шаблонизатора
$aLang - массив фраз многоязыкового интерфейса
$oPage - объект управления отображением страницы
...
...

Если в классах теоретически эти переменные можно унаследовать агрегированием при создании каждого экземпляра (что с моей точки зрения просто извращение), то в функции придётся передавать множество параметров, которые имеют очень слабое отношение к этой функции. А это сильно ухудшает понятность кода.
Одним словом директива global, является крайне правильной и необходимой директивой, балансирующей возможности языка в связи с локальностью пространства имён в пределах функций.

betik, я не совсем понимаю, как ты себе представляешь

по умолчанию переменные внешние видны внутри ф-ии

в языке, не требующем явного объявления переменных.
Здесь я кстати не вижу никаких проблем, алгоритм мог быть такой: если переменная не найдена в таблице имён локальной области видимости функции, производится поиск в таблице глобальной области видимости, если переменной нету и там, то она создаётся в соответствии со стандартной процедурой создания не объявленной переменной (получает null значение). Как видно здесь производится двойная работа, что нерационально для интерпретируемого языка.
 

Crazy

Developer
Автор оригинала: betik
Любой флуд лишён смысла. Отмазка мимо кассы.
Для тех, кто не понял, объясняю: я не вижу смысла беседовать с человеком, который читаем адресованные ему сообщения в лучшем случае через строку.

Бессмысленно.

-~{}~ 29.04.05 14:10:

Автор оригинала: ONK
Глобальные переменные несомненно необходимы.
Утверждение несомненно неверно.
 

betik

Новичок
ONK а если какая-нть функция, чужая например, будет использовать $CONFIG в своих локальных целях, а $CONFIG глобален?...

CRAZY ты про себя?
 

ONK

Пассивист PHPСluba
Crazy, утверждение без доводов - простой трёп.

betik, если кто-то пишет свои расширения к твоему программному продукту, он должен почитать документация о том как это надо делать правильно. В документации должны быть описаны зарезервированные глобальные имена и то как их надо использовать. Например в ПХП есть $_SERVER $_SESSION $GLOBALS $_ENV ..... это тоже глобальные переменные необходимость которых очевидна. Если ты, почитав документацию к ПХП, сочтешь необходимым использовать эти имена по своему усмотрению, то ответственность за возможные проблемы будет лежать на тебе.
 

betik

Новичок
ONK, а если ты берёшь чужую ф-ю? В таком случае есть вероятность что прийдётся переписывать куски кода ф-ии, а для меня самое противное переписывать чужой код, например...
 

ONK

Пассивист PHPСluba
betik, твой аргумент надуман. В любом случае, ты не должен тащить в свой проект всё что попало, не делая аудит кода. Надеюсь что ты догадаешся проверить список имён находящийся в директиве global этой функции.
 
Согласен с ONK.
При чём надо заметить, классическую фразу, о том, что любая технология/алгоритм может быть использованна как удачно так и не очень.

Здесь очень важно разумное использование этих переменных. Во первых, не стоит напоминать, что в глобалс можно запихивать только то, что однозначно определялось ранее - это ясно и так.
Но и нельзя забывать про стиль программирования: Если используется globals, то правильнее всего начать функцию с перечисления всех глобальных переменных, которые в ней используются.

Тогда все доводы о переносимости исчезают:
Хотите взять под себя, просто измените описание и первую строчку функции.
Crazy:
Утверждение несомненно неверно.
Т.О. Ты хочешь сказать, что неверно использовать массивы $_SESSION, $_SERVER и $_REQUEST(и его образующие)?
 

Макс

Старожил PHPClub
betik
тема была открыта 3 дня назад.
Сколько классов за эти 3 дня ты уже написал ? (или попытался написать)
Какие книги по ооп ты начал читать ?

Если ты сам ничего не делаешь чтобы разобраться в ООП, то я эту тему прикрою.
 
Сверху