У меня есть библиотека CI, которая загружает переносимый контент из XML-файла в класс, а класс имеет волшебный метод __get, который проверяет, определено ли это свойство при его ссылке, возвращая локализованный ключ, если это так, или имя ключа плюс '_ #', чтобы сообщить мне, что перевод отсутствует, если нет.
Все круто.
Однако, поскольку все это зависит от свойств объекта, я получаю много предупреждений «уведомление: неопределенный и т. Д.», Когда я запускаю debug (E_ALL), и это раздражает. Я не хочу отключать уведомления, но я хочу знать, как отключить это внутри этой конкретной библиотеки (если это возможно). Я мог бы поставить @ перед каждым вызовом классу, но опять же, это тоже ужасно.
Какие-нибудь советы?
Упрощенные фрагменты кода ниже:
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"?>
thing en
thing pt
Поскольку вы используете $ this
для хранения переводов, __ get
вызывается только для несуществующих свойств. Измените его, предупреждение, которое вы получаете, только сообщает вам, что вы делаете что-то неправильно:
function __get($key)
{
return $key."_#";
}
Это действительно все, что вам нужно сделать.
Ты имел ввиду
$this->t->$key
вместо
$this->$key
?
Тогда вам также нужно будет исправить назначение:
$this->t->$name = ...
Обычно, когда вы проверяете свойство в функции __ get
, вы не должны видеть никаких предупреждений. Предупреждения показывают, что вы допустили некоторую ошибку в своей программной логике, поэтому они полезны, и вы не должны отключать их даже для короткой части вашего кода. Отключение предупреждений - это не решение, а исправление кода.
Дайте мне знать, если это будет полезно.