beklenmedik T_TRY, bekliyordum T_FUNCTION hata mesajı, değil emin niçin?

3 Cevap php

Ben, beklenmedik T_TRY alma T_FUNCTION hata mesajı bekliyordum ve de neden biz bu gibi sınıf içinde deneyin ve catch bloğunu kullanabilirsiniz olamayacağını alıyorum kadar emin değilim am:

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 Cevap

Try-catch etmeyin her yöntemin içinde, sadece denemek-catch olabilir senin sınıf kullandığınızda:

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

Bu şekilde sınıf daha temiz olacak ve hataları ile ne karar verebilirsiniz. Birden yerlerde senin sınıfını kullanmak özellikle - Eğer her durum için hata işleme özelleştirilmiş olabilir.

Tek bir try-catch bloğu içine tüm yöntem tanımları koyamazsınız.

Yerine

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

Eğer kullanmak zorunda

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

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

}

Sen bir yöntemin dışında bir sınıfta herhangi bir "Bu şeyler yapmak"-kod olamaz. Orada şeyler içinde sadece bir yöntem olması nedeniyle bu kıvırcık parantez içinde "yapmayı denemek" için hiçbir şey değildir definitions.