Объясните дураку ооп. Видимость переменных в разных инстансах.

cDLEON

Онанист РНРСlub
Ragazzo
А кто говорит тащить ? Вообще, если честно, то тянут. Те же генераторы, finally....Это вполне нормально. Другой вопрос, что постоянно у них реализация хромает. А они все эти баги "фичами" называют.
 
  • Like
Реакции: AmdY

Ragazzo

TDD interested
cDLEON
Что поделать... поэтому нужно знать хотя бы один фоллбек еще да)
 

Тугай

Новичок
объект получается как фотон - обладает одновременно свойствами ЭМ волны и материальной частицы - функции и переменной
На самом деле:
static - это форма записи такая глобальной переменной только в описании класса.
Такой глобал можно ограничить использовать только объектами данного класса или его потомками или не ограничивать.

P.S.
Но любые глобалы это "страшное зло" - ветер скорей всего дует от рисовальщиков UML диаграм, столько стрелочек рисовать это ужас - зависимости это плохо и т.п.
 

Фанат

oncle terrible
Команда форума
Но любые глобалы это "страшное зло"
Вот никогда не понимал этого утверждения.
Использование глобалов для передачи локальных для скрипта данных из одной функции в другою - это, действительно, страшное зло.
Но что плохого в по определению глобальных переменных - убейте меня - не понимаю.

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

А больше всего не понимаю - это когда городят фабрику инстансов для автоматической генерации интефейсов по управлению коллекциями управляющих структур, наследующих инъекцию зависимостей и инкапсулирующих управление инициализациями. И все это - только ради того, чтобы не писать табуированное слово global.
Но в итоге, по сути, все эти $instance::getInstance()->makeSureWeGotRightInstance()->instanceOf(dependencyHandler)->willWeEverGetOurInstance->never() - этот все тот же global $instance, только вид сбоку. Плюс килобайт 500 кода, без которого вся эта колбаса работать не будет.
 

Тугай

Новичок
А больше всего не понимаю - это когда городят фабрику инстансов для автоматической генерации интефейсов по управлению коллекциями управляющих структур, наследующих инъекцию зависимостей и инкапсулирующих управление инициализациями. И все это - только ради того, чтобы не писать табуированное слово global.
Вот зачем такое в PHP - я тоже никак не пойму. :)
В java, насколько я понимаю ее как обыватель, более или менее понятно зачем - там распределенная система и глобальная переменная в одной виртуальной машине, не существует в другой, а если ее как-то заводить то какая правильная и прочее. Поэтому там "фабрики фабрик" и куча методов решать проблемы распределенной системы.
 

hell0w0rd

Продвинутый новичок
А чего не так-то? Статические переменные - как константы, но которые можно менять. Если провести аналогию с заводом - все оборудование в нем - статические функции, запас сырья - статические переменные. Поэтому при создании продукта(объекта) объект может и не создаться, ибо не хватает сырья, но от объекта к объекту оно остается все тем же сырьем, а оборудование - ну вы поняли
 

hell0w0rd

Продвинутый новичок
Извините, но в этом месте ржал в голос
А почему нет? Константы также используются, как и статические переменные - только их невозможно поменять. Если привести к описанной выше аналогиее - кол-во необходимого сырья для продукта и будет константа.
 

С.

Продвинутый новичок
GusakovNick, почти правильно (про видимость забыл), но супер по-чайнически. Потому и смешно.
 

fixxxer

К.О.
Партнер клуба
А почему нет? Константы также используются, как и статические переменные - только их невозможно поменять
Константы используются так же, как и статические переменные - их значение берут и используют в коде, но только присваивания константам, в отличие от статических переменных, значение которых можно переопределить, нет, потому что константы невозможно поменять, а так то же самое, только константы, а не статические переменные.
 

fixxxer

К.О.
Партнер клуба
все эти $instance::getInstance()->makeSureWeGotRightInstance()->instanceOf(dependencyHandler)->willWeEverGetOurInstance->never() - этот все тот же global $instance, только вид сбоку. Плюс килобайт 500 кода, без которого вся эта колбаса работать не будет.
Можно проще. :)
 

A1x

Новичок
А чего не так-то? Статические переменные - как константы, но которые можно менять. Если провести аналогию с заводом
классический пример, который объясняет смысл статических переменных
PHP:
class Animal
{
    private static $population = 0;

    public function __construct(.....) {
        ...........
        self::$population++;
    }

    public function __destruct() {
        self::$population--;
    }
}
статическая переменная - это переменная которая имеет смысл в контексте всего класса, а не только одного объекта
их потому еще и называют - переменные класса.
В приведенном примере переменная $population содержит количество объектов данного класса,
которые существуют в системе в настоящий момент
 
  • Like
Реакции: AmdY

VVWind

Новичок
А я как-то давно пришел сюда с вопросом про global и мне ответили что никакого глобал - только передача переменных через аргументы, только хардкор.

Кстати, нашел.

не ходи по городу голый и не используй глобальные переменные, и не тупи!
Да не надо человека плохому учить, к чёрту комплексы. Можешь ходить по городу голым, но глобальные переменные не используй.

Глобальные переменные могут быть изменены или unset в любой месте, а твои методы должны быть максимально автономны. Ты можешь напрямую передавать эти переменные как параметр в функцию.

>Окей, почему global лучше не использовать?
Считай это нормой морали.

Нельзя ходить голым по городу и использовать global.
В общем-то норма морали, плохой тон и все такое, насколько я понимаю.
 

Вурдалак

Продвинутый новичок
А я как-то давно пришел сюда с вопросом про global и мне ответили что никакого глобал - только передача переменных через аргументы, только хардкор.
Ты говоришь таким тоном, как будто в этой теме говорится иначе.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Запрещать глобальные переменные мотивируя моралью - очень плохо.
Хотите мораль - идите в церковь, а программирование - точная наука.

У любого правила есть обоснование и ограничения. Лень писать - не портите человеку жизнь, напишите: "это плохо, но лень объяснять".
Никакого Абсолютного Запрета на глобальные переменные нет. И никогда не будет.

С глобальными переменными только две проблемы:
1. изменения имеют непредсказуемые последствия.
2. связанность кода

Если эти проблемы контролировать, глобальные переменные использовать можно. Так же, как и объекты из глобального репозитория.
Фанат, я тебя правильно понял?
 

AmdY

Пью пиво
Команда форума
С глобальными переменными только две проблемы:
1. изменения имеют непредсказуемые последствия.
2. связанность кода
Собственно эти пункты можно свести к одному - зависимости. И фактически ты повторил то же, что он привёл в моей цитате, но при этом VVWind видит лишь моральные проблемы :( Печалька.
 

MiksIr

miksir@home:~$
К слову, статика и Синглтон не решают как минимум второй проблемы, а часто никто и не думает даже первую решать.
 

Lionishy

Новичок
Разделяемый ресурс -- архитектурная особенность.
Разделяемый символ -- некачественное программирование.

Под той самой "дурной" глобальной переменной подразумевают в школах именно разделяемый символ, а не ресурс.

Проблема связанности и непредсказуемости -- проблема плохого проектирования разделяемого ресурса, а не глобальной переменной.
 
Сверху