Size: a a a

2021 September 05

А

Антон in Laravel Pro
Нормально или нет – зависит от случая. Но это работает. Если это обычная переменная, то точно нормально: посмотрите на array_pop, array_shift, preg_match, они все работают таким же образом, с той лишь разницей, что это функции, а не объекты. А хаку с приватным св-вом точно не место в продуктовом проекте. Разве что в библиотеках и то если без этого никак (посмотрите на код доктрины, там такое бывает)
источник

SD

Sergey Donin in Laravel Pro
ок, спасибо

это как раз сторонняя библиотека и этого можно было избежать (на мой взгляд) Она (библиотека) у меня память "угоняет" вот я и копаю в каком же это месте, профайлер мне не помог (ну или я не тот выбрал) Пытаюсь глазами копать
источник

А

Антон in Laravel Pro
Это может быть как раз из-за передачи св-ва по ссылке. GC не чистит объекты, пока есть входящие на него ссылки. Правда, работает ли это для правила, когда передают св-ва объекта, – хз. В расте бы работало, но там есть lifetime у ссылок.
источник

r

rip your face in Laravel Pro
Это будет конечно костыльно, но можно попробовать что-то придумать вокруг (new Exception())->getTrace() Мне по сути нужно зафиксировать модуль с которого было вызвано создание и по неймспейсам это можно будет сделать
источник

SD

Sergey Donin in Laravel Pro
там весь код пропитан by reference (в соседнем чате предположили, что сишник писал, они дескать любят передавать по ссылке) И похоже, что вы правы. GC не чистит ничего, хотя по логике объекты не должны долго жить (обычные простые парсеры)

Вот так вот захочешь чужую библиотеку взять и разгребай её потом… эх…

А вам спасибо, за трезвый взгляд
источник

EG

Egor Gruzdev in Laravel Pro
Что за либа, если не секрет?
источник

А

Антон in Laravel Pro
А если исключения нет? С таким же успехом можно заюзать debug_backtrace
источник

SD

Sergey Donin in Laravel Pro
да я уж вам про нее говорил https://github.com/php-mqtt/client Жрет память как не в себя
источник

r

rip your face in Laravel Pro
Так там не важно есть оно или нет, это просто создается класс. Оно вроде никак не влияет на поведение.
источник

А

Антон in Laravel Pro
Но это очень тупое решение. Подумай о тех, кому после тебя читать код.
источник

А

Антон in Laravel Pro
Что подумает человек, увидев в середине кода (new Exception())->getTrace()? Бредятина. Используй debug_backtrace, но это штука может и по памяти упасть, если неправильно юзать.
источник

А

Антон in Laravel Pro
Лучше скажи, в чем задача состоит
источник

r

rip your face in Laravel Pro
Есть observer с created updated И есть модули скрапперов (их количество может изменяться) с которых создаются модели они так же могут созваться с под админ панели. Нужно или зафиксировать юзера авторизированного который создал модель или наименование скраппера
источник

А

Антон in Laravel Pro
А что мешает это передавать в том месте, где создаются модели?
источник

r

rip your face in Laravel Pro
С трейс можно в обсервер добавить связь неймспейса с скраппером и по trace определить кто делал манипулиции
источник

А

Антон in Laravel Pro
Ну это же хуйня, ну серьезно. Такая же, как если делать SomeMode::create(), а внутри использовать request()->all().
источник

r

rip your face in Laravel Pro
Это нужно править код модулей. А хотелось бы сделать это независимо от них.
источник

А

Антон in Laravel Pro
А должно хотеться сделать нормально. Ладно, тебе страдать.
источник

r

rip your face in Laravel Pro
Ну вот у меня есть 10 модулей с кучей кода внутри и 20 моделей на которых это нужно отследить. Мне получается нужно смотреть каждый модуль и что там делали с 20 моделями? Где обнволяли, где создавали.
источник

А

Антон in Laravel Pro
Да. Сложно, но ты же разработчик. Должен разрабатывать системы, а не угнетать их. Видишь говно – правь. Потому что то, что ты описал и что хочешь сделать, это зло. Все должно быть явным, сигнатуры должны быть однозначными, изнутри (тем более модель) не нужно ничего пытаться получить. Объекты должны работать с тем, что им дали. А тут получается, что ты пытаешься через 3 слоя кода получить того, кто был на первом уровне вместо того, чтобы руками передать его. Со штормом не трудно порефакторить.
источник