2010-03-25 91 views
0

我收到意想不到的T_TRY,期待T_FUNCTION错误消息,我不知道是太为什么我得到的是,我们不能用try和catch块类是这样的:意外的T_TRY,期待T_FUNCTION错误消息,不知道为什么?

class Processor 
{ 

    protected $dao; 

    protected $fin; 

    try 
    { 
     public function __construct($file) 
     { 
      //Open File for parsing. 
      $this->fin = fopen($file,'w+') or die('Cannot open file'); 
      // Initialize the Repository DAO. 
      $this->dao = new Dao('some name'); 
     } 

     public function initiateInserts() 
     { 
      while (($data=fgetcsv($this->fin,5000,";"))!==FALSE) 
      { 
       $initiate_inserts = $this->dao->initiateInserts($data); 
      } 
     } 
     public function initiateCUpdates() 
     { 
      while (($data=fgetcsv($this->fin,5000,";"))!==FALSE) 
      { 
       $initiate_updates = $this->dao->initiateCUpdates($data); 
      } 
     } 
     public function initiateExecuteIUpdates() 
     { 
      while (($data=fgetcsv($this->fin,5000,";"))!==FALSE) 
      { 
       $initiate_updates = $this->dao->initiateIUpdates($data); 
      } 
     } 
    } 
    catch (Exception $e) 
    { 
    } 
} 

回答

2

不要的try-catch每种方法的里面,你可以简单的try-catch当您使用类:

try { 
    $p = new Processor($file); 
    $p->initiateInserts(); 
    $p->initiateCUpdates(); 
    // and so on... 
} catch (Exception $e) { 
    // handle the error... 
} 

通过这种方式,您的班级将变得更加清洁,您可以决定如何处理错误。特别是如果您在多个地方使用您的课程 - 您可以为每个案例定制错误处理。

+0

其实我也是这样做的,但事情是我需要捕获异常跟踪信息并将其与当前数据库状态一起收集,因此我无法在同一个文件中执行这两个操作,所以我正在寻找其他可用选项。 – Rachel 2010-03-25 21:56:00

2

你不能有任何“做这个东西” - 在方法之外的类中编码。在大括号内没有什么可以“尝试去做”的,因为里面的东西只是方法定义

+0

比我怎样才能实现try和catch块将涵盖所有的方法,因为可能所有的方法都可以抛出异常,所以我捕获try块内的所有方法,并尝试在catch块中做些什么。 – Rachel 2010-03-25 21:40:19

+0

@Rachel:甚至没有一种方法抛出任何异常。你没有什么可以抓到的。 – 2010-03-25 21:41:47

+0

他们可以,因为他们正在与数据库进行交互,请不要介意我仅仅是知识,但作为新编程我的基金并不明确。 – Rachel 2010-03-25 21:43:50

3

您不能将所有方法定义放入一个try-catch块。

而不是

class Foo { 
    try { 
    public function func1() { } 
    public function func2() { } 
    } 
    catch(Exception $e) { 
    } 
} 

,你必须使用

class Foo { 
    public function func1() { 
    try { 
     ... 
    } 
    catch(Exception $e) { 
     ... 
    } 
    } 

    public function func2() { 
    try { 
     ... 
    } 
    catch(Exception $e) { 
     ... 
    } 
    } 

} 
+0

我可以为每个方法使用不同的try块,但是一个catch块可以捕获所有可能被所有方法抛出的异常吗? – Rachel 2010-03-25 21:41:14

+0

在这种情况下,将e-> getMessage()与所有异常跟踪结合起来,还是以个体为基础,实际上我想记录所有异常跟踪。 – Rachel 2010-03-25 21:42:33

+0

不确定你想要达到的目标。但是如果你没有发现异常,它会“唤起”调用堆栈。在堆栈中的任何地方,你都可以捕捉异常,甚至做些东西然后重新抛出它(让它继续冒泡)。所以,根据你的实际目标,你可能会对http://docs.php.net/set_exception%20handler – VolkerK 2010-03-25 21:46:49

相关问题