Ответов: 7 Просмотров: 2452
|
Привет Всем программистам! Только начинаю общаться с ООП и возникают некоторые вопросы ответы на которые не всегда могу найти - требуется помощь зала, и присутствующих в нём гуру.
Вопрос состоит в следующем. Я создал класс. И хочу создать объект класса. Но в конструкторе класса я проверяю наличие трёх стринговых переменных - ключей, которые передаю в конструктор при создании объекта. Если хотя бы одной из переменных нет или она инвалидна - объект класса не создаётся. Создаётся throw exception который пишет в лог что произошла ошибка. И тут возникает самое главное затруднение, т.к. мой класс используется в стороннем коде программистом, то я для показа каких то ошибок использую метод класса get_info_my_error вызвав который программист увидит ошибку, сформированную в виде массива. Но я не могу показать ошибку, которую вызывает создание объекта без необходимых параметров - ведь объект класса не будет создан и соответственно я уже не смогу обратится к методу объекта чтобы показать ошибку. и нужно либо в блоке catch смотреть что выдается ошибка, соотвественно не в том формате что я обычно выдаю своим классом (не ввиде массива). Поэтому стоит вопрос - я сейчас пробую создать потомка класса в нём в блоке констракт создать объект с теми параметрами что переданы потомку и проверить если нормально создался объект потомка класса - то обращаться к методам класса через объект потомка - ведь он же является extends от родителя значит и все методы работают и сообщение об ошибке я смогу запрашивать у объекта потомка если объект класса в потомке в конструкторе не смогу создать. Как то так.... но я не знаю как это правильно реализовать - может вы подскажите - как это корректно сделать - или поделитесь ссылкой или поправите меня. Может это всё делается намного проще или по другому прошу подсказать. Заранее спасибо.
Привожу код класса и то как создаю объект и пытаюсь проверить при создании - но проверка не проходит ((
PHP:
скопировать код в буфер обмена
<?PHP class my_parent_class extends my_class { public function __construct($host, $kkey, $skey) { //parent::__construct($host, $kkey, $skey); try { $cnt = new my_class($host,$kkey,$skey); } catch (ExpayException $e) { // handle exception } if ($cnt) {} } } /** * Class my_class */ class my_class { /** * @var string */ static $host; /** * @var */ static $kkey; /** * @var */ static $skey; public function __construct($host, $kkey, $skey) { { switch($host) { case 'localhost' : self::$host = 'http..'; break; case 'myhost' : self::$host ='http..'; break; default: self::$host ='Error Host'; throw new myException('Error: Error Host!',500); return null; } self::$kkey = $kkey; self::$skey = $skey; } else { throw new myException('Error: One of variables is empty!',401); } } //.... } echo 'Тест Class'.'</br>'; // создаем объект класса $host='localhost'; $kkey='d7asd876c67f2a53'; $skey='asdasdasdasdasd';//'';// try { $f = new my_parent_class($host,$kkey,$skey); } catch (myException $e) { // handle exception $err=$e->getMessage(); echo $err; } echo $f->name; $post_fields=$f->get_info_my_error(); // и вот тут не работает проверка на if объекта исходного класса - был ли он создан потомком или нет в констракте if ($f->cnt) { } ?>
|