1

これは現在使用している私の機能です:

function pdo_connect(){
  try {

      $pdo = new PDO('mysql:host=localhost;dbname='.DB_NAME, DB_USER, DB_PASS);
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);     
      $pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );           
      $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

  } catch (PDOException $e) {

      die("Error!: " . $e->getMessage() . "<br/>");

  }

  return $pdo;
}

しかし、私がこれを使用したと考えてください

$pdo->setAttribute( INVALID_SYNTAX, false );

致命的なエラーは見たくありません:

致命的なエラー: 12 行目の C:\xampp\htdocs\test.php の未定義のクラス定数 'INVALID_SYNTAX'

例外をキャッチしたいのですが、どうすればいいですか?

4

2 に答える 2

2

未定義の定数エラーは例外ではなく、コンパイル エラーです。これは構文エラーのようなもので、修正が必要なコードの根本的なエラーです。実行時にキャッチしても意味がありません。また、実際には不可能です。

また、定数は「未定義のクラスINVALID_SYNTAX定数」エラーをトリガーすることはなく、「プレーンな」未定義定数エラーのみをトリガーします。


例外は、実行時に例外的なエラーを処理するために存在します。例外的なエラーは、通常の実行中に発生してはならないエラーですが、発生した場合に備えています。
定数の入力ミスは常にエラーの原因となり、常に同じエラーが発生します。それは例外ではなく、単に間違ったコードです。したがって、実行時に動的に処理する必要はありません。

于 2013-10-01T08:34:45.697 に答える
1

実際、開発段階のエラーをキャッチしても意味がありません

定数は、開発段階でのみ未定義にすることができます。そして、それをキャッチしても意味がありません。開発者はそれを定義して先に進むだけです。

例外は、PHP で最も誤解されているメカニズムの 1 つです。実際には、回復可能なエラーを何らかの方法で処理できる場合にのみ使用する必要がありますが、PHP ユーザーは、エラー報告、データ検証、またはエラー抑制演算子として、適切な方法以外でそれを利用します。

于 2013-10-01T08:54:44.123 に答える