170 похожих чатов

Кстати, гуру вы эдакие. ) Есть такой интерес: Имеется класс (назовем

его) GeneralFunctions с кучкой методов не подходящих ни под одну группу классов, которые дергаются из разных мест.
Какие есть способы доступа к сим методам, кроме:
singltone,
экземпляр класса сделать глобальным,
передавать ссылки на методы или экземпляр класса в виде аргумента в конструктор
?

6 ответов

18 просмотров

в разных языках типа c# или go это получило название "делегат" - ссылка на функцию. В php отдельно передавать ссылки на функции и методы нельзя, но можно немного схитрить - и передать замыкание на базовый объект с генератором (yield) до вызова, то есть вам потребуется объект, его метод (публичный) и функция-враппер с yield в качестве генератора...

𝕽𝖔𝖒𝖆𝖓 𝕯𝖊𝖗 𝕻𝖔𝖌𝖗𝖔𝖒𝖎𝖘𝖙
тогда уж проще экземпляр класса гонять. )

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

Alexey Shatunov
не совсем, в одном случае вы просто сохраните в па...

я понимаю это. но 100500 ссылок на объекты тоже как-то неправославно. Но спасибо за мысль.

Alexey Shatunov
не совсем, в одном случае вы просто сохраните в па...

вот что начиталось: " Начиная с PHP объектная переменная больше не содержит сам объект как значение. Такая переменная содержит только идентификатор объекта, который позволяет найти конкретный объект при обращении к нему. Когда объект передаётся как аргумент функции, возвращается или присваивается другой переменной, то эти разные переменные не являются псевдонимами (алиасами): они содержат копию идентификатора, который указывает на один и тот же объект. " и проверил объем съедаемой памяти. память изменяется только при вызове методов и изменении свойств экземпляра объекта. при любых передачах экземпляра объекта в качестве аргумента или return и присваивание выделяемая память не меняется (я подозреваю, что оно просто заранее выделяет под переменные/свойства какой-то объем с запасом, и если создать 100500 переменных, то что-то изменится) [при $a = $b - все статично, но на $a = &$b память дополнительно выделяется] походу оно реально передает только идентификатор объекта поэтому можно тупо кидаться экземпляром объекта. просто "замыкание на базовый объект с генератором" слегка оверкодингом попахивает.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта