|
|
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
Допустим есть следующие наследование классов: Код: plaintext 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. Интересует следующее: как сделать так, чтобы - если не выполняется какое-то условие в конструкторе класса A, то возвращался "NULL-объект" - при этом требуется получить сообщение об ошибке, из-за которого невозможно создание экземпляра класса. Единственное, что пока приходит в голову - ввести еще один метод в класс A, который будет определять возможно ли использовать экземпляр класса или нет. Как вообще поступают в таких случаях? P.S. Сразу извиняюсь за коряво поставленный вопрос, потому что сам пока не знаю как точнее и понятнее описать проблему. Если что, задавайте вопросы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2005, 17:01 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
наследовать сущность от класса Error это все равно что наследовать ее от класса DB - неправильно. Что можно наследовать от класса Error - другие ошибки. Примером может быть дерево исключений в любом языке (например python http://www.python.org/doc/current/lib/module-exceptions.html) Объекта Null - не существует - есть значение null. Хотя можно создать самому такой класс. > - если не выполняется какое-то условие в конструкторе класса A, то возвращался "NULL-объект" создавать объект не через конструктор а через статический метод (паттерн factory и ему подобные) $db = DB::createConnection(); Что касается получения текста ошибки можно придумать разные способы: 1. возвращать объект типа Error. (см pear) 2. создать в классе поле error и в случае ошибки писать в него текст : $db = new DB(); if ($db->error) { die($db->error); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2005, 17:51 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
.-.-.-.-.-наследовать сущность от класса Error это все равно что наследовать ее от класса DB - неправильно. С замечанием полностью согласен. Просто хотелось сделать один интерфейс для получения и обработки ошибок. Может быть Вы тогда посоветуете в каком направлении двигаться. В ООП-программировании на PHP я пока что не силен и это мой первый опыт :). .-.-.-.-.-Объекта Null - не существует - есть значение null.Если вы заметили, то там были кавычки " ("NULL-объект"). .-.-.-.-.-Что касается получения текста ошибки можно придумать разные способы: 1. возвращать объект типа Error. (см pear) 2. создать в классе поле error и в случае ошибки писать в него текст : $db = new DB(); if ($db->error) { die($db->error); } А как в себя в таком случае поведут наследуемые классы? Не будет ли перекрытия имен и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2005, 18:18 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
В большинстве случаев агрегацию следует предпочесть наследованию. Наследуемые классы поведут себя так, как ты напишешь. Если получиться наложение, то это будет твоя ошибка. Под ПХП5 можно использовать private-свойства, тогда такие наложения можно будет легче отслеживать. Посоветовать в обучении ничего не могу (разве что почитать похожие обсуждения на phpclub - там таких вопросов было много) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2005, 19:07 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
Может быть Вы тогда посоветуете в каком направлении двигаться. если хотите ООП то следует двигаться в сторону тех языков (или их версий) которые позволяют это делать, а не извращаться там где это скорее всего совершенно не нужно. ЗЫ ох могут побить за подобные заявления тута ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2005, 19:48 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
vfabr Может быть Вы тогда посоветуете в каком направлении двигаться. если хотите ООП то следует двигаться в сторону тех языков (или их версий) которые позволяют это делать, а не извращаться там где это скорее всего совершенно не нужно. ЗЫ ох могут побить за подобные заявления тута ;-)) уже достаю ремень %) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2005, 10:58 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
vfabr Может быть Вы тогда посоветуете в каком направлении двигаться. если хотите ООП то следует двигаться в сторону тех языков (или их версий) которые позволяют это делать, а не извращаться там где это скорее всего совершенно не нужно. ЗЫ ох могут побить за подобные заявления тута ;-)) в ПХП5 вполне нормальные возможности для ООП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2005, 11:56 |
|
||
|
(PHP, ООП, наследование) Как поступают в таких случаях?
|
|||
|---|---|---|---|
|
#18+
для тех кто в танке повторяю языков (или их версий) ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2005, 12:13 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=33139062&tid=1478034]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 447ms |

| 0 / 0 |
