我有三个文本文件,其中包含三种语言的相同错误消息集:英语、法语和德语。
我需要扩展exception类,这样当出现错误时,会抛出自己的exception对象,例如“抛出新的My-Exception(" English ",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(); }
?> 这不能正常工作。如果有任何帮助,我将不胜感激。
发布于 2012-11-20 04:38:21
我不会为每种语言抛出特定的异常消息,而是坚持使用一个正常的异常。然后,当您在应用程序中捕获这些错误时,您可以显示特定语言的错误页面。换句话说,不要为了最终的字体结束问题而彻底改变您的应用程序体系结构(即使是以这种次要的方式)。
发布于 2012-11-20 05:28:48
我想你把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)$errno或intval($errno)将其转换为int。
PHP是“松散类型的”,通常在后台执行,所以你不必担心它,但你应该担心它。否则,您会偶尔遇到代码执行非常奇怪的事情的情况。
发布于 2012-11-20 05:30:50
您提到的错误消息如下所示:
文件(errfiles/english.txt):无法打开流
所以尝试使用错误文件的完整路径...
$errors = file('C:/xampp/htdocs/HW4/errfiles/'.$this->lang.'.txt'); 另外,你能确认这个文件确实是以大写"E“开头的吗?
第二个错误:
在第13行的C:\xampp\htdocs\HW4\index.php中为
()提供的foreach参数无效
是因为第一个问题。解决这个问题,一切都会好起来的。
https://stackoverflow.com/questions/13461749
复制相似问题