![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| WolfAlone |
|
||||||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Здравствуйте! Есть некоторый пользовательский класс:
В этом классе, как видно - в конструкторе содержится 3 аргумента (параметра), последний из которых имеет значение по умолчанию. Если сделать так:
То есть, передать не 2 (или 3) параметра в конструктор, то будет ошибка (предупреждение): Warning: Missing argument 2 for class1::__construct() Вопрос: Как до вызова метода (функции) или конструктора класса, узнать, какое количество параметров он принимает, значения которых не определены по умолчанию, что бы избежать подобных ошибок (предупреждений)? То есть, если при создании экземпляра класса, если в конструктор передаются не все обязательные параметры - наприме, прервать выполнение скрипта с помощь, например
P.S. Можно обязать конечного пользователя наследовать собственные классы (типа class1) от уже заранее заготовленного, базового класса. Но в таком случае, возникает вопрос, как сделать обработчик ошибок в нём? -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
||||||
|
|||||||
| The_Aleksey |
|
|||
![]() <?php ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.10.2007 Где: Москва Репутация: 5 Всего: 6 |
Можно просто убрать вывод варнингов (это конечно проблему не решает, но на экран ничего не вылезет)
На выходе получилось: 1//World! |
|||
|
||||
| Shogun |
|
|||
|
сёгун-сан ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 8.6.2006 Где: Кишинёв Репутация: 9 Всего: 11 |
Через Reflection можно.
-------------------- 2b || !2b |
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
вариантов немало, но очевидный и правильный - указать для всех "необязательных" параметров значения по умолчанию. если параметр "обязательный" и аргумент не передан - паника в скрипте уместна. Ведь все равно не понятно, откуда взять недостающие и, раз нет значения по умолчанию, не очевидные критические данные? с другой стороны, если вызывающий код не "знает", сколько аргументов требуется, то к черту такой вызывающий код! так недалеко до того, что вызывающий код начнет передавать не те аргументы или не в том порядке.
Добавлено через 5 минут и 4 секунды для справки: менее очевидные и менее корректные - это передавать один аргумент-массив:
или же объявить функцию вообще без параметров и использовать func_get_args:
но, в виду написанного ранее, я считаю этот путь порочным. и привожу это решение только "для информации" |
||||
|
|||||
| Sentox |
|
|||
|
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Ломаем да!!! Ну и в принципе парим мозги.
Это сообщение отредактировал(а) Sentox - 14.11.2010, 02:18 |
|||
|
||||
| Just123 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 9.12.2007 Где: localhost Репутация: нет Всего: нет |
http://ru2.php.net/manual/en/reflectionfun...fparameters.php
|
||||
|
|||||
| Just123 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 9.12.2007 Где: localhost Репутация: нет Всего: нет |
Я реализовал это следующим образом:
Правда, не знаю, как лучше сделать, недостающим аргументам присваивать значение FALSE или показывать ошибку. Это сообщение отредактировал(а) Just123 - 16.11.2010, 01:05 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |