Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php: логика работы оператора @ зависит от окружения ? / 5 сообщений из 5, страница 1 из 1
26.11.2016, 21:42
    #39355187
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php: логика работы оператора @ зависит от окружения ?
Имеется 2 сервера - на одном php 5.6 , на другом - php 5.4 .
В обоих конфигах:
Код: php
1.
error_reporting = E_ALL | E_STRICT | E_NOTICE | E_DEPRECATED

На обоих серверах проверено через phpinfo: error_reporting = 32767

Вот этот код:
Код: php
1.
2.
3.
4.
$param = 'ttt';
class cl {}
$obj = new cl();
$out = @is_array($obj->$param);

в первом случае никаких notice не генерирует, во втором - генерирует ( Undefined property: cl::$ttt ).

Логично предположить, что в версии 5.4 оператор подавления не распространяет своё действие на вложенные выражения, в версии 5.6 - распространяет.
Только вот на 1-м сервере ранее был php 5.3.3 - и никаких notice также не генерировалось.

Так в чём причина ? Может, какие-то другие настройки php влияют на поведение этого оператора ?
...
Рейтинг: 0 / 0
27.11.2016, 03:09
    #39355279
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php: логика работы оператора @ зависит от окружения ?
Cyrax_02,

А это имеет значение? Синтаксис для лентяя :))

Я бы это лучше написал вот так:
Код: php
1.
2.
3.
4.
$param = 'ttt';
class cl {}
$obj = new cl();
$out = property_exists($obj, $param) && is_array($obj->$param);
...
Рейтинг: 0 / 0
27.11.2016, 13:48
    #39355370
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php: логика работы оператора @ зависит от окружения ?
авторА это имеет значение? Синтаксис для лентяя :))В проекте используется ряд сторонних библиотек ( smarty и пр.), которые активно используют оператор @. Причём так, как показано в моём примере - для подавления ошибок при выполнении внутренних выражений. В итоге на php 5.4 получаем туеву хучу notice 'ов в логах.

Посему задачу необходимо решить, не изменяя исходников этих библиотек и сохраняя уровень логирования NOTICE .
На php 5.4 (если это из-за версии).

Может, всё-таки не в версии дело ? Что из окружения может влиять на поведение @ ?
И почему в официальной справке про это поведение ни слова ? И во всём Интернете - ни слова ?
...
Рейтинг: 0 / 0
27.11.2016, 14:48
    #39355399
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php: логика работы оператора @ зависит от окружения ?
Cyrax_02На php 5.4 (если это из-за версии).Затестил из командной строки на двух машинах с 5.4.36 (дебиан) и 5.4.45 (фряха) - собака давит нотис и там и там.

Cyrax_02при выполнении внутренних выраженийНе припомню, чтобы в документации что-то было про внутренние (и внешние) выражения. Насколько понимаю, под выражением принимается всё до конца строки или закрывающей скобки.
...
Рейтинг: 0 / 0
27.11.2016, 16:04
    #39355430
Cyrax_02
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php: логика работы оператора @ зависит от окружения ?
Как оказалось, дело в окружении. Не в версии php .
А именно - в xdebug . Настройка xdebug.scream была включена:
авторxdebug.scream
Type: boolean, Default value: 0, Introduced in Xdebug >= 2.1
If this setting is 1, then Xdebug will disable the @ (shut-up) operator so that notices, warnings and errors are no longer hidden.Все настройки php просмотрел - ничего похожего не нашёл. А на xdebug не подумал, поскольку ошибки реально подавлялись (в тот момент xdebug был отключен - поэтому и подавлялись).
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php: логика работы оператора @ зависит от окружения ? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]