期待T_TRY,期待T_FUNCTION错误信息,不确定为什么?

时间:2010-03-25 21:36:59

标签: php syntax try-catch

我得到了意想不到的T_TRY,期待T_FUNCTION错误消息,我也不确定为什么会这样,我们不能在类中使用try和catch块,如下所示:

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)
    {
    }
}

3 个答案:

答案 0 :(得分: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) {
      ...
    }
  }

}

答案 1 :(得分:2)

你不能在方法之外的类中使用任何“做这个东西”代码。在这些大括号内没有“尝试做”,因为里面的东西只是方法定义

答案 2 :(得分:2)

不要在每个方法中尝试捕获,只需在使用类时尝试捕获:

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

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