Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: На раздумку

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Реализация класса - отладки.
DeertOff
Отправлено: 03 Декабря, 2013 - 07:58:20
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




Имеется произвольный класс. Наследован от класса который должен вызывать методы - "ДО" вызова методов класса наследника. При этом класс наследник не вызывает(не знает) о методах родителя.
При этом использование parent:: и self::, не возможно, чтоб не писать код , который придется удалять после отладки.
Единственная мысль парсинг самого скрипта, возможно есть какая альтернатива?

(Отредактировано автором: 03 Декабря, 2013 - 08:10:40)

 
 Top
Stierus Супермодератор
Отправлено: 03 Декабря, 2013 - 08:21:06
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




мои соболезнования человеку, которому придется поддерживать это после вас Улыбка
 
My status
 Top
Zuldek
Отправлено: 03 Декабря, 2013 - 08:22:16
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Что мешает решить в конструкторе?
Ощущение попытки чистки зубов через задний проход.

(Отредактировано автором: 03 Декабря, 2013 - 08:24:45)

 
 Top
Stierus Супермодератор
Отправлено: 03 Декабря, 2013 - 08:22:25
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




А если по делу - опишите задачу, не ваш вариант решения, а первоначальную задачу, которую нужно решить
 
My status
 Top
DeertOff
Отправлено: 03 Декабря, 2013 - 08:28:27
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




Всё просто есть "разработчик PHP", которому нужно отладить своё приложение(классы). Собственно возможность отладки , Без изменения кода (возможно наследование), от класса отладки.

Цитата:
Что мешает решить в конструкторе?
Ощущение попытки чистки зубов через задний проход.


В конструкторе я не знаю о "Будущем" классе и его методах (Во время создания своего объекта).

(Отредактировано автором: 03 Декабря, 2013 - 08:36:40)

 
 Top
Stierus Супермодератор
Отправлено: 03 Декабря, 2013 - 08:46:31
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Если для отладки у вас используются "измененные" классы - вы не можете гарантировать одинаковость работы Улыбка Используйте log4php или что-нибудь в этом духе и не мучайтесь. Есть сообщения разного уровня детализированности, есть дебаг-режим, в котором все сообщения всех уровней детализации выводятся в спец-панель
 
My status
 Top
DeertOff
Отправлено: 03 Декабря, 2013 - 08:48:40
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




К этом и дело что в отладке "не ипользуються". Изменённые обьекты.
Нужен вызов методов класса родителя. При вызове метода самого наследника.

(Отредактировано автором: 03 Декабря, 2013 - 09:57:18)

 
 Top
caballero
Отправлено: 03 Декабря, 2013 - 10:07:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
При этом класс наследник не вызывает(не знает) о методах родителя.

Он всегда знает о методах родителя

Цитата:
Всё просто есть "разработчик PHP", которому нужно отладить своё приложение(классы). Собственно возможность отладки , Без изменения кода (возможно наследование), от класса отладки.

А на фига менять код для отладки? Об отладчиках никогда не слышали*


Цитата:
Единственная мысль парсинг самого скрипта, возможно есть какая альтернатива?

конечно есть - функции интроспекции в самом PHP

Цитата:
В конструкторе я не знаю о "Будущем" классе и его методах (Во время создания своего объекта).

бред какой то

наведите порядок в своих мыслях и сформулируйте задачу не через заднее место


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
AmsTaFF
Отправлено: 03 Декабря, 2013 - 10:17:17
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




тупиковый метод отладки... нормального способа реализации - нету. Любое изменение класса-реального, будет влечь за собой изменение класса-дебагового. В дальнейшем погрязнете в этом...

Что могу посоветовать - так это тесты+рефакторинг.
 
 Top
DeertOff
Отправлено: 03 Декабря, 2013 - 11:14:31
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




Цитата:

При этом класс наследник не вызывает(не знает) о методах родителя.

Он всегда знает о методах родителя

Для человек пишущего для себя - бесспорно.
Но, если пишешь для кого-то такое понятие как "Абстракция" должно быть в приоритете.
Класс родитель по определению не знает что от некого наследуют!
А если он знает о родителе - значит вызывает его методы, значит, после отладки придётся удалять всё что связано с родителем!

Цитата:

Всё просто есть "разработчик PHP", которому нужно отладить своё приложение(классы). Собственно возможность отладки , Без изменения кода (возможно наследование), от класса отладки.

А на фига менять код для отладки? Об отладчиках никогда не слышали*

У меня вопрос и состоял в том что как избежать изменения кода!
Всё возможно... со скалы всем прыгать не запрещатют.


Цитата:

В конструкторе я не знаю о "Будущем" классе и его методах (Во время создания своего объекта).

бред какой то

Не бред а факт.

Цитата:

Единственная мысль парсинг самого скрипта, возможно есть какая альтернатива?

конечно есть - функции интроспекции в самом PHP

Какие?


Это не "War" зачем писать ересь?

(Отредактировано автором: 03 Декабря, 2013 - 11:26:04)

 
 Top
esterio
Отправлено: 03 Декабря, 2013 - 11:45:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




DeertOff пишет:
Для человек пишущего для себя - бесспорно.

Если Вы унаследуете класс, значит должны знать его интерфейс, так уж устроено. Потомок знает об интерфейсе родителя. Если не знает значит нефиг наследовать.

По сабжу приведу пример.
Спойлер (Отобразить)

Ето всего лишь пример. Не стоит об етом забивать. Но смысл следующий. Всегда визиваеться логирование. Но логирование происходит если включен дебаг-режым.
Там конешно можно поизвращаться с помощю debug_backtrace, выводом в консоль, записью в файл, максимальным размером файла и прочее. Но ето куда лучше наследования от класса для дебага, что нарушает ООП-концепцию
 
 Top
DeertOff
Отправлено: 03 Декабря, 2013 - 11:51:52
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




.... Блин, возможно я не правильно выразился. Мне "НЕЛЬЗЯ" что-бы дочерний объект знал, о классе тестере! При - этом тестер должен знать о всех методах дочернего класса! Если он будет вызывать методы тестера - придется после теста, удалять часть написанного кода! А это рушит всю структуру - Тестируемый класс не должен вызывать методов класса который его тестирует!

Ситуация такая -> Загружаеться "index.php" -> от подгружает контроллер -> он подгружает модель -> втыкает данные в контроллер -> контроллер грузит представление...
При этом во все стрелки воткнуть свой обработчик!

(Отредактировано автором: 03 Декабря, 2013 - 12:01:52)

 
 Top
esterio
Отправлено: 03 Декабря, 2013 - 11:57:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




А зачем удалять. Еще раз повторюсь, логирование будет происходить только если свойство $debug в моем примере будет иметь значение true, иначе ниччего не произейдет. А теперь представьте следующую ситуацию: Вы сделали отладку, удалили все логирование, но забили подправить еще один баг. Вам наново нужно будет ставить логировани, а так одна пимпочка и логирование снова включено.

Еще один пример с Yii
https://github[dot]com/yiisoft/yii/b[dot][dot][dot]Command.php#L214
Спойлер (Отобразить)
 
 Top
DeertOff
Отправлено: 03 Декабря, 2013 - 12:06:42
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




В вашем примере исключения. Они рубят скрипт а мне надо проверить всё что есть. До конца. Всё дело в том что работает несколько разработчиков, каждый может допустить ошибку, идея в том что-бы каждый разработчик решал свои ошибки.

(Отредактировано автором: 03 Декабря, 2013 - 12:09:59)

 
 Top
esterio
Отправлено: 03 Декабря, 2013 - 12:16:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Это пример исключительной ситуации, тоесть неверно запроса к БД. Но также там стоит try...catch, что позволяет не кидать Вам исключение в ответ, а залогировать и продолжить работу скрипта.
Одним словом приведите пример как Вы хотите сделать и не будем тут обсуждать сверическых коней в вакууме
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB