我有三个文本文件,包含三种语言的同一组错误消息:英语,法语和德语。
我需要扩展异常类,以便在出现错误时抛出自己的异常对象,例如“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(); }
?>
这不能正常工作。我将不胜感激任何帮助。
答案 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
是因为第一个。解决这个问题,一切顺利。