我有一個CI庫,它將XML文件中的可翻譯內容加載到類中,並且該類有一個magic __get方法,用於檢查該屬性是否在引用時定義,如果是的話返回本地化的關鍵字,或者是關鍵字加'_#',讓我知道如果沒有,翻譯就會丟失。使用magic__get方法時禁止未識別的屬性警告
都很酷。但是,因爲這一切都取決於對象的屬性,所以當我在調試(E_ALL)中運行時,我得到了很多'notice:undefined etc ..'警告,這很煩人。我不想禁用通知,但我想知道如何禁用這個特定的庫內(如果可能)。我可以在每次打電話給班的時候都放@,但是再一次,這太可怕了。
任何提示?
簡化代碼如下片段:
class MY_Translation
{
function _get_keys($lang) {
// load xml translations, could split this into different files..
$translations = new DOMDocument();
$translations->load($_SERVER['DOCUMENT_ROOT']."/xml/translations.xml");
if ($translations) {
$words = $translations->getElementsByTagName("word");
$count = 0;
foreach($words as $word){
$name = $word->getAttribute('name');
$trans = $word->childNodes;
if ($trans->length > 0) {
for($i = 0; $i < $trans->length; $i++) {
$child = $trans->item($i);
if ($child->nodeName == $lang) {
$this->$name = $child->nodeValue;
}
}
}
}
}
}
function __get($key){
if (property_exists('MY_Translation',$this->$key)) {
return $this->$key;
} else {
return $key."_#";
}
}
}
XML(僅供參考,所以很清楚發生了什麼):
<?xml version="1.0" encoding="UTF-8"?>
<words>
<word name="thing">
<en>thing en</en>
<pt>thing pt</pt>
</word>
</words>
對不起,我遺漏了t =新的stdClass。但是,您幫助我專注於觸發警告的位置 - 「property_exists」不在__get上,也不在於啓動該調用的引用。將@放在property_exists的前面會抑制警告。 – dmp
讓@來抑制錯誤是一種不好的做法。你應該避免使用它。 – Buddy
如果您引用'$ this'來將翻譯存儲爲屬性,'__get'只會在不存在的情況下被調用。所以你甚至不需要檢查它。相反,只是返回它不會存在的字符串。正如所寫,你應該修正錯誤,而不是壓制它。 – hakre