0

我有三个文本文件,其中包含三种语言的相同错误消息集:英语、法语和德语。

我需要扩展异常类,以便当出现问题时,会抛出自己的异常对象,例如“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

我不会为每种语言抛出特定的异常消息,而是坚持一个正常的异常。然后,在您的应用程序中,当您捕获这些错误时,您可以显示特定语言的错误页面。换句话说,不要因为最终的字体问题而彻底检查您的应用程序架构(即使是这种次要的方式)。

于 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"您专门将其转换为intusing(int)$errno或之前,它是一个字符串intval($errno)

PHP 是“松散类型”的,通常在后台执行此操作,因此您不必担心它,但您应该担心它。否则,您会偶尔遇到代码执行非常奇怪的事情的情况。

于 2012-11-19T21:28:48.190 回答
0

您提到错误消息如下所示:

文件(errfiles/English.txt):无法打开流

所以尝试使用错误文件的完整路径...

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

您还可以确认该文件确实以大写“E”开头吗?

第二个错误:

第 13 行 C:\xampp\htdocs\HW4\index.php 中为 foreach() 提供的参数无效

是因为第一个。解决这个问题,一切都很好。

于 2012-11-19T21:30:50.257 回答