エラー処理については、数日前に同様の質問をしました。人々はクラスからエラーを得る方法を私に説明しました。複数の関数からのクラスのPHPエラー処理
include 'class.php';
try {
$test = new magic('', '', '33');
$test->printFullname();
} catch (Exception $exc) {
echo $exc->getMessage(); //error messages
}
それは動作しますが、このクラスの別の関数での問題:
と私はclass magic
{
/**
* @param string $name
* @param string $surname
* @param int $age
* @throws Exception
*/
public function __construct($name, $surname, $age)
{
$errors = [];
if (empty($name)) {
$errors[] = 'Name is required.';
}
if (empty($surname)) {
$errors[] = 'Surname is required.';
}
if (!empty($errors)) {
throw new Exception(implode('<br />', $errors));
}
$this->name = $name;
$this->surname = $surname;
$this->age = $age;
}
public function printFullname()
{
echo $this->name . ' ' . $this->surname;
}
}
別のファイルをどのようにエラー名を作成し、
__construct
セクションに検証するためにそれを理解するが、それでも複数の機能に苦しんで
class magic
{
/**
* @param string $name
* @param string $surname
* @param int $age
* @throws Exception
*/
public function __construct($name, $surname, $age)
{
$errors = [];
if (empty($name)) {
$errors[] = 'Name is required.';
}
if (empty($surname)) {
$errors[] = 'Surname is required.';
}
if (!empty($errors)) {
throw new Exception(implode('<br />', $errors));
}
$this->name = $name;
$this->surname = $surname;
$this->age = $age;
}
public function printFullname()
{
echo $this->name . ' ' . $this->surname;
}
public function auth()
{
//authentication goes here
if...
$errors[] = 'Error1';
else
$errors[] = 'Error2';
etc...
}
}
別のファイル:
include 'class.php';
try {
$test = new magic('', '', '33');
$test->auth();
} catch (Exception $exc) {
echo $exc->getMessage(); //error messages
}
私の関数auth()は動作していて、echoと同じようにエラーを返しますが、私は配列を使いたいと思います。
を呼び出します'$ test = new magic( ''、 ''、 '33');コンストラクタは例外をスローし、インスタンス化されたオブジェクトを返すことはありません。したがって、 '$ test'はnullになり、' $ test-> auth(); 'はまったく実行されません。例外はユーザーの入力エラーを処理する最善の方法ではないかもしれません。 – feeela
@feeelaだから、もしあなたが単純ならば、echo '';各機能で? –
いいえ、必要な引数が期待どおりでない場合、コンストラクタで[InvalidArgumentException'をスローすることができます(http://php.net/InvalidArgumentException)。しかし 'auth()'のようなメソッドはステータスコードを返さなければなりません。クライアントにいくつかの有用なエラーメッセージを提示したい場合があるので、クラス自体にエラーテキストを格納することは最善の方法ではありません。エラーコードを返すと、さまざまな言語でメッセージを表示することができます。しかし、型付き例外(@GiamPyの回答を参照)を使用するというアイデアも機能します。 – feeela