PHP中用户友好的错误消息

时间:2012-11-19 20:35:29

标签: php

我有三个文本文件,包含三种语言的同一组错误消息:英语,法语和德语。

我需要扩展异常类,以便在出现错误时抛出自己的异常对象,例如“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();  }  

?> 

这不能正常工作。我将不胜感激任何帮助。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)$errno将其专门用作intval($errno)

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

答案 2 :(得分:0)

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

  

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

因此,请尝试使用错误文件的完整路径...

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

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

第二个错误:

  

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

是因为第一个。解决这个问题,一切顺利。