Как мне остановить дальнейшие методы в классе PHP? - PullRequest
2 голосов
/ 28 января 2010

Я учусь ООП с PHP. Я создаю класс для извлечения данных XML с веб-сайта. Мой вопрос состоит в том, как мне остановить данный объект от выполнения большего количества методов, если есть ошибка с первым методом Например, я хочу отправить URL:

class GEOCACHE {
   public $url;

   public function __construct($url)
   {
      $this->url=$url;
      if (empty($this->url))
      {
         echo "Missing URL";    
      }
   }
   public function secondJob() 
   { 
      whatever
   }
}

когда я пишу так:

    $map = new GEOCACHE ("");
    $map->secondJob("name");

Как я могу предотвратить выполнение метода secondJob в данном объекте без завершения сценария?

Ответы [ 4 ]

2 голосов
/ 28 января 2010

Создайте исключение в конструкторе, поэтому объект никогда не будет создан

public function __construct($url)
{
   $this->url=$url;
   if (empty($this->url))
   {
      throw new Exception("URL is Empty");    
   }
}

Затем вы можете сделать что-то вроде этого:

try
{
    $map = new GEOCACHE ("");
    $map->secondJob("name");
}
catch ( Exception $e)
{
    die($e->getMessage());
}
1 голос
/ 28 января 2010
class GEOCACHE {
   public $url;

   public function __construct($url)
   {
      $this->url=$url;
      if (empty($this->url))
      {
         throw new Exception("Missing URL");    
      }
   }
   public function secondJob() 
   { 
      whatever
   }
}

try{
    $map = new GEOCACHE ("");
    $map->secondJob("name");
}catch($e){
  // handle error.
}
1 голос
/ 28 января 2010

Рассмотрите возможность использования исключений для управления потоком сценария. Добавьте исключение в конструктор и перехватите его снаружи.

0 голосов
/ 28 января 2010

Бросить исключение из __construct

public function __construct($url)
{
  if(null == $url || $url == '')
  {
     throw new Exception('Your Message');
  {
}

тогда в вашем коде

try
{
  $geocache = new Geocache($url);
  $geocache->secondJob();
  // other stuff
}
catch (exception $e)
{
  // logic to perform if the geocode object fails
}
...