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