如何在PHP类中停止进一步的方法?

时间:2010-01-28 04:48:08

标签: php error-handling object methods

我正在学习使用PHP的OOP。我正在创建一个从网站中提取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 个答案:

答案 0 :(得分:2)

在构造函数中抛出异常,因此永远不会创建对象

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 :(得分:1)

考虑使用exceptions来控制脚本的流程。在构造函数中抛出异常,并将其捕获到外部。

答案 2 :(得分:1)

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.
}

答案 3 :(得分:0)

从__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
}