XMLファイルの翻訳可能なコンテンツをクラスにロードするCIライブラリがあります。クラスは参照時にそのプロパティが定義されているかどうかを調べるmagic __getメソッドもしあればローカライズされたキーを返すか、またはキーインと_ _を付けて、もしそうでなければ翻訳が欠落していることを知らせます。魔法の__getメソッドを使用しているときの身元不明の警告を表示しない
すべてクールです。
しかし、これはオブジェクトのプロパティに依存するため、私はdebug(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 = new stdClassを残しました。しかし、あなたは私が__getにない 'property_exists'やその呼び出しを開始する参照で、警告がどこにトリガされたかに集中するのを助けました。 property_existsの前に@を置くと警告が表示されなくなりました。 – dmp
エラーを抑えるために@を置くことは悪い習慣です。あなたはそれを使用しないでください。 – Buddy
'$ this'を参照して翻訳をプロパティとして保存する場合、' __get'は存在しない場合にのみ呼び出されます。だからあなたはそれをチェックする必要はありません。代わりに、存在しない文字列を返すだけです。書かれているように、あなたはエラーを修正し、抑止してはいけません。 – hakre