de-vraag
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 dmp
dmp
Вопрос

Подавлять предупреждение о неизвестном свойстве при использовании метода магии __get

У меня есть библиотека 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
    

1 2011-10-27T18:49:38+00:00 1
 dmp
dmp
Редактировал вопрос 27-го октября 2011 в 7:34
Программирование
class
codeigniter
php
warnings
hakre
27-го октября 2011 в 7:01
2011-10-27T19:01:33+00:00
Дополнительно
Источник
Редактировать
#56791607

Поскольку вы используете $ this для хранения переводов, __ get вызывается только для несуществующих свойств. Измените его, предупреждение, которое вы получаете, только сообщает вам, что вы делаете что-то неправильно:

function __get($key)
{
    return $key."_#";
}

Это действительно все, что вам нужно сделать.


Ты имел ввиду

$this->t->$key

вместо

$this->$key

?

Тогда вам также нужно будет исправить назначение:

$this->t->$name = ...

Обычно, когда вы проверяете свойство в функции __ get , вы не должны видеть никаких предупреждений. Предупреждения показывают, что вы допустили некоторую ошибку в своей программной логике, поэтому они полезны, и вы не должны отключать их даже для короткой части вашего кода. Отключение предупреждений - это не решение, а исправление кода.

Дайте мне знать, если это будет полезно.

1
0
Похожие сообщества 24
phpGeeks
phpGeeks
4 693 пользователей
Best PHP chat @phpGeeksJunior - новичкам @golangGeeks - гошка @jobGeeks - вакансии(250000 р/мес) @dbGeeks - базы данных @ebanoePhp - канал о PHP @laravel_pro - Laravel @jsChat - JS @moscowProgers - Москва Реклама: https://vk.cc/cbJtVV ДР - 28.03.2016
Открыть telegram
PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
3 836 пользователей
Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii etc. Full/par-time, remote и т.д. ПРАВИЛА: https://t.me/php_jobs/45345 Флудильня: @phpimhorus More: @javascript_jobs, @nodejs_jobs, @devops_jobs, @sql_jobs
Открыть telegram
phpGeeksJunior
phpGeeksJunior
3 051 пользователей
Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Реклама: https://vk.cc/cbJtVV Правила и полезные ссылки https://github.com/phpgeeks-club/faq Бест от пхпгикс https://t.me/best_of_phpgeeks
Открыть telegram
#php chat
#php chat
2 921 пользователей
Группа для новичков и бывалых. Не стесняйтесь задавать вопросы по php. Уважаем друг друга. Администрация: @kaviychik Сотрудничество: @valeriya_blonski
Открыть telegram
PHP
PHP
2 625 пользователей
Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/fesor/6c8b162ac1e2fe4d6f227341ec8eaadf Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev
Открыть telegram
phpclub.ru
phpclub.ru
1 756 пользователей
Официальный чат phpclub.ru - остерегайтесь подделок 😊 Уважайте друг друга. Скриншоты ссылками. Код на pastebin.com. Вакансии публиковать на форуме phpclub.ru, в чат только ссылку на форум. За рекламу и мат - БАН!
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Roxana Elizabeth CASTILLO Avalos
Зарегистрирован 4 дня назад
2
Hideo Nakagawa
Зарегистрирован 5 дней назад
3
Sergiy Tytarenko
Зарегистрирован 1 неделю назад
4
shoxrux azadov
Зарегистрирован 1 неделю назад
5
Koreets Koreytsev
Зарегистрирован 1 неделю назад
© de-vraag 2022
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией