0

英語、フランス語、ドイツ語の 3 つの言語で同じエラー メッセージのセットを含む 3 つのテキスト ファイルがあります。

何か問題が発生した場合に独自の例外オブジェクトがスローされるように、例外クラスを拡張する必要があります。たとえば、"throw new My-Exception("English", 4) - 英語ファイルの 4 番目のメッセージが表示されます。

これは私がこれまでに作ったものです:

<?php  

class My_Exception extends Exception {  

     function __construct($lang, $errcode) {  
        $this->lang = $lang;  
        $this->errcode = $errcode;  
     }  

   function getMessageMap() {  
        $errors = file('errfiles/'.$this->lang.'.txt'); 

        foreach($errors as $error) {  
            list($key,$value) = implode(',', $errors); 
            $errorArray[$key] = $value; 
        }  
        return $errorArray[$this->errcode];  
    }  

}  

try {  throw new My_Exception('english', 3);  }  
catch (My_Exception $e) { echo $e->getMessageMap();  }  

?> 

これは正しく動作しません。どんな助けにも感謝します。

4

3 に答える 3

1

言語ごとに特定の例外メッセージをスローする代わりに、1 つの通常の例外に固執します。次に、アプリケーションでこれらのエラーをキャッチすると、特定の言語のエラー ページを表示できます。言い換えれば、最終的にはフォントエンドの問題になるアプリケーション アーキテクチャを (たとえこの小さな方法であっても) オーバーホールしないでください。

于 2012-11-19T20:38:20.730 に答える
0

私はあなたが持っていimplode()explode()混同していると思います。errors.txt ファイルが次のようになっているとします。

1,I am error one
2,I am error two

したがって、それぞれ$errors as $errorを次のようにしますexplode(',', '1,I am error one');

array("1", "I am error 1")

はい、どちらかまたはを使用して具体的にキャストするまで、は文字"1"列です。int(int)$errnointval($errno)

PHP は「ゆるく型付け」されており、通常はこれをバックグラウンドで実行するため、心配する必要はありませんが、心配する必要があります。そうしないと、コードが非常に奇妙なことを行う状況に遭遇することがあります。

于 2012-11-19T21:28:48.190 に答える
0

エラーメッセージは次のようになります。

ファイル (errfiles/English.txt): ストリームを開けませんでした

エラーファイルのフルパスを使用してみてください...

$errors = file('C:/xampp/htdocs/HW4/errfiles/'.$this->lang.'.txt'); 

また、ファイルが本当に大文字の「E」で始まることを確認できますか?

2 番目のエラー:

C:\xampp\htdocs\HW4\index.php の 13 行目の foreach() に無効な引数が指定されました

一枚目のせいです。それを修正すれば、すべて問題ありません。

于 2012-11-19T21:30:50.257 に答える