Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
пример (как-то так): Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. Это кусок моего фреймворка для работы с объектами БД как сущностями и позволяющий "не заморачиваться" каким способом соединять таблицы зависимых сущностей БД промеж себя, дабы выбрать нужную конфигурацию данных. Пример сильно упрощен, дабы показать проблему. А проблема в следующем: обнаруживается утечка памяти при таком способе работы с наследованием, а именно: дочерние классы не имеют метода объекта выборки данных. Метод выборки - один и находится в базовом классе. Каждый дочерний класс переопределяет собственный статический метод формирования запроса (или его части), который окончательно собирается уже в базовом методе выборки данных: Base->getData(). Проблема в том, что "память медленно течёт". PHP 5.2.17. Кто-нибудь сталкивался с таким или я делаю что-то запрещенное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2013, 19:02 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
автор// собственно заглушка. Наверное можно сделать даже abstract, не пробовал. static public function getSql( Select $sql, array $params ) { return false; } не пишите своё. возьмите уже существующий фреймворк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2013, 23:24 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ScareCrow, а по существу вопроса - ответов/советов не будет? Дело в том, что все проверки, воткнутые в код - отрабатывают "как надо". Апач работает в среднем часов 6 и потом валится по 502, сообщая "canary mismatch on efree() heap overflow ..." на вызове одного и того же метода, который достает данные из БД таким способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 09:04 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Какой "существующий" фреймворк посоветуете, для решения следующих задач: 1. Выборка данных из БД сложной архитектуры (сущности распределены в среднем по 10-12 подчиненным таблицам) в 3-4НФ + EAV + Иерархическое хранение сущностей, произвольной переменной вложенности. То есть запрос к БД надо формировать динамически, желательно оптимального построения из простых массивов/наборов условий, типа: "отдай мне все заявки по регионам таким-то, кроме города такого-то, которые прошли по фирмам имеющим в своем прайсе товары, у которых свойство "длина" не более 4м из товарных подразделов содержащих вид товара "доска", кроме такого раздела И которые (фирмы) отвечали на заявку не позднее 1 часа от момента отправки заявки." Формулируется и собирается крайне просто, в виде сложного массива типа Код: php 1. 2. 3. 4. 5. 6. 7. , и чтобы мне было достаточно прописать некий базовый метод(ы) к той или иной сущности (региону, городу, мылам и т.д.) КАК она участвует в запросах ... и больше не парить моск КАК составить очередной запрос... и какие там джойны, подзапросы, сортировки и группировки или даже объединения используются - по барабану. 2. Чтобы к выборке/запросу автоматически добавлялись проверки по ключам доступа данного юзверя, блокировкам данных по например наличию некоторого события в системе или его отсутствия или до его истечения... например "данные не проверены модератором портала" 3. Чтобы при модификации данных автоматически добавлялась инфа об авторе сего действа и моменте модификации... куда-то и как-то (мне все равно) 4. Чтобы при модификации данных автоматически велась история для "исторических" данных. 5. Чтобы при наличии иерархии сущностей автоматически вставлялись в запрос джойны к структуре иерархий. 6. Чтобы система была "легко расширяема" в части добавления новых сущностей. Тут - достаточно отнаследовать новый клас для новой таблички и прописать одно сложное место: статический метод getSql(), который собственно и парсит набор допустимых для сущности параметров. Ваше предложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 09:47 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Arhat109, Да, ещё: полнота методов модификации данных, а именно возможность использования ВСЕХ форм оператора insert, в том числе и массивом данных одним запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 09:49 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 13:00 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ScareCrow, и? думаете не читал и не смотрел? наивняк. По сабжу, насколько понимаю ответов нет. Жаль. не по теме: покажите КАК в доктрине будет создан запрос по указанному набору условий... брошу всё и перейду на Доктрину ... или куда ещё. у меня это выглядит так, как в конце примера, последней строчкой... тока массивчик "заменить" на приведенный далее. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 14:54 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ты по русски скажи что те надо. пока только могу послать в доку http://doctrine-orm.readthedocs.org/en/2.0.x/reference/query-builder.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 16:56 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ScareCrowты по русски скажи что те надо. пока только могу послать в доку http://doctrine-orm.readthedocs.org/en/2.0.x/reference/query-builder.html Понятно. То есть вы - теоретик, и ни по вопросу ответить, ни по фреймворкам подсказать... Подскажите тогда, чем ЭТО(по ссылке на доку) отличается от ZF? "внезапно", УЖЕ сказано "чё надо", причем буквально парой постов выше 14378610 , все 7 пунктов (с последующим постом). Даже пример приведен "в чисто словах" (для тех кто понимает по-русски) ... и в виде массива набора условий (для программистов). Кстати, по теме. Вопрос, похоже закрыт. Разобрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 19:21 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Arhat109, если разобрался, расскажи пожалуйста в чём дело то было. Мало ли, на такое же кто-нить нарвётся. Что бы знать хотя бы чего остерегаться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 19:57 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрArhat109, если разобрался, расскажи пожалуйста в чём дело то было. Мало ли, на такое же кто-нить нарвётся. Что бы знать хотя бы чего остерегаться :) Сухошин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 21:38 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Програмёр, Банальщина... сисадмин при "обновлении" сервака воткнул в него бажную версию PHP 5.2.6 ... заменили. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2013, 23:09 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
>> PHP: Вызов static метода из метода объекта. Баг или фича? Странный вопрос. А что статические методы запрещено вызывать из любого места кода? >>$className = get_class($this); >>$sql = call_user_func($className.'::getSql'... >>...бажную версию PHP 5.2.6 Каменный век PHP 5.4.15 (Current stable) Начиная с 5.3 можно (и нужно) static::getSQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 08:17 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
apapacy, пасибки. Это всё известно. Но пока крутится 5.2.17 (он и стоял... нафига админ переставлял - не знаю)... переход на последний stable release поставлен планы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 08:22 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
apapacy, ещё. Там не просто стоит вызов статического метода из метода объекта... вы же заметили: вызов статического метода, того дочернего класса, чей объект обратился к методу объекта... который НЕ перекрывается в дочернем классе (он финальный, есть только в базовом классе - родителе).. не был уверен, что PHP способен на такой "выверт"... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 08:25 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Arhat109, Обратите внимание на использование parent:: (not self::) Доступно с версии 5.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 10:02 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Sorry not parent:: - static:: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 13:09 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Arhat109, 1. могу предположить что в пхп наследование статических методов лучше не стоит юзать. К примеру никогда не пытались написать: abstract static ? Сразу ошибку получите. 2. все что вы описаи есть как вам уже все посоветовали (ScareCrow==doctrine) лучше юзать готовые фреймворки и ормы.К примеру : Код: php 1. 2. 3. 4. 5. 6. 7. это чуть ли не копия relations у yii. автор2. Чтобы к выборке/запросу автоматически добавлялись проверки по ключам доступа данного юзверя, блокировкам данных по например наличию некоторого события в системе или его отсутствия или до его истечения... например "данные не проверены модератором портала" defaultScope вам поможет дополнительно фильтровать автор3. Чтобы при модификации данных автоматически добавлялась инфа об авторе сего действа и моменте модификации... куда-то и как-то (мне все равно) init() автор4. Чтобы при модификации данных автоматически велась история для "исторических" данных. behaviors (те же самые тригеры) автор5. Чтобы при наличии иерархии сущностей автоматически вставлялись в запрос джойны к структуре иерархий. with автор6. Чтобы система была "легко расширяема" в части добавления новых сущностей. Тут - достаточно отнаследовать новый клас для новой таблички и прописать одно сложное место: статический метод getSql(), который собственно и парсит набор допустимых для сущности параметров. эот не понял зы. как видите все это уже умеют современые фреймворки, зачем тратить время на написание ооного вручную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 16:03 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Ренат, пасибки, в имеющихся фреймворках (по крайней мере тех, что смотрел и юзал) - задачи решаются или по отдельности или через ..опу. Собственно решение - как раз и есть результат опыта писания на фреймворках.. Сейчас, холиварить нет никакого желания и времени, поскольку сабж о другом. Я был наивен, ошибка осталась. Идей пока больше нет, требуется помощь. Итого: Стоит Squeeze, nginx, apache2, PHP 5.2.17, suhosin, eaxelerator, memcache и есть Zend. Судя по логам апача, ошибка появляется при вызове одного и того же метода, который получает в параметрах массив данных и массив настроек КАК его преобразовать (типа getModeSelector( array, array); ). Используется в 5 местах. 1. В одном вызове получает полноценный массив в первом параметре и преобразует его в цикле по набору условий из другого масива. Этот вызов в логах апача последнее время - не светится. 2. В 3-х случаях вместо первого параметра получает неустановленную переменную (null), опознает ситуацию - есть проверка if( !isset(..) ) и, в этом случае использует часть второго массива как набор для выборки из БД для получения списка, типа так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вот здесь $modeModel->getData() -- как раз обращение к единому базовому методу выборки данных... используется в куче мест (около 50 классов моделей отнаследовано). Лог ошибки heap overflow указывает только на этот вызов. Сервер валится с 502 ошибкой. 3. Причем сегодня обнаружил такой момент: вставляешь в файл просто пробел в комментариях к чему-либо: и какое-то время оно работает... может полчаса, может 5 минут... может несколько часов. После чего опять валится с тем же переполнением. Это-то КАКИМ БОКОМ может происходить?!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 19:06 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
Код: php 1. жжошь! жгт еще! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 19:13 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
авторСтоит nginx, apache2, PHP 5.2.17 и ты таки зажёг! ты сделал мой скучный поденельник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 19:22 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ScareCrow, а по-подробней, чего не понравилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 19:22 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
ScareCrow, или только троллить есть настроение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 19:28 |
|
||
|
PHP: Вызов static метода из метода объекта. Баг или фича?
|
|||
|---|---|---|---|
|
#18+
late static bindings тебе ничего не говорит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2013, 19:30 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38282610&tid=1463734]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 348ms |

| 0 / 0 |
