неожиданное T_TRY, ожидающее сообщение об ошибке T_FUNCTION, не знаете почему? - PullRequest
0 голосов
/ 26 марта 2010

Я получаю неожиданное 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 ]

3 голосов
/ 26 марта 2010

Вы не можете поместить все определения своих методов в один блок 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) {
      ...
    }
  }

}
2 голосов
/ 26 марта 2010

Не пытайтесь поймать внутри каждого метода, вы можете просто попробовать поймать, когда используете свой класс:

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

Таким образом, ваш класс станет намного чище, и вы сможете решить, что делать с ошибками. Особенно, если вы используете свой класс в нескольких местах - вы можете настроить обработку ошибок для каждого случая.

2 голосов
/ 26 марта 2010

У вас не может быть никакого кода "do this stuff" в классе вне метода. Внутри этих фигурных скобок нечего «пытаться делать», потому что внутри есть только метод определения .

...