Задать вопрос
  • (PHP5) Почему присваивание работает как клонирование?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нету тут никакой магии с клонированием.

    Для начала давайте разберемся что хранит $instance. Хранит оно ССЫЛКУ на объект а не сам объект. При простом присвоении по значению происходит копирование значения переменной, а оно у нас просто ссылка на объект. В итоге у нас уже две ссылки на один объект.

    При присвоении переменной $reference значения по ссылке, у нас две переменные делят одно и тоже значение. А значение это - ссылка на объект.

    Когда мы затираем ссылку в $instance, то есть мы меняем значение оной, оно же меняется и у $reference так как они делят на двоих одно значение. $assigned же имеет свою ссылку на объект.

    $instance = new SimpleClass(); // количество ссылок на экземпляр SimpleClass - 1
    
    $assigned   =  $instance; // количество ссылок на экземпляр SimpleClass - 2
    $reference  =& $instance; // количество ссылок на экземпляр SimpleClass - 2
    
    $instance = null; // количество ссылок на экземпляр SimpleClass - 1


    Как только у нас не останется ссылок на экземпляр класса, сборщик мусора удалит объект.

    А что до клона - если бы объекты бы копировались, начался бы ад, так как объекты хранят другие объекты, которые могут делить между другими объектами... словом там слишком сложно все становится и пусть уж лучше программист это в __clone сам разруливает.
    Ответ написан
    1 комментарий
  • Подключение 100 светодиодов к arduino. Какие есть решения?

    @Smilleey
    Микросхема 74HC595 — один из самых распространённых сдвиговых регистров: синхронный, с регистром данных (latch). Она позволяет увеличивать количество выходов микроконтроллера.
    Чип преобразовывает входящий последовательный сигнал на 1 пине (Ds) в выходной параллельный на 8 пинах (Qx). Последовательная передача синхронна: для такта используется дополнительный пин (SHcp). Также отдельным пином управляется регистр данных (STcp), что позволяет изменять сигнал на 8 выходах единовременно, когда все данные переданы.
    Таким образом образом из трёх пинов микроконтроллера, такого как Arduino, можно получить 8 цифровых выходов. Из регистров 74HC595 можно делать каскады, подключая один за другим (через пин Q7’), и таким образом из всё тех же 3 входящих линий получать 16, 24, 32 и т.д. цифровых выходов.
    Используйте сдвиговый регистр для увеличения количества выходов микроконтроллера. Например, для управления большим количеством светодиодов.
    Для удобной работы с чипом через Arduino, существует встроенная функция shiftOut.
    Ответ написан
    4 комментария