Пропускать ошибки php

Оператор управления ошибками

PHP поддерживает один оператор управления ошибками: знак @.
В случае, если он предшествует какому-либо выражению в PHP-коде, любые
сообщения об ошибках, генерируемые этим выражением, будут подавлены.

Если пользовательская функция обработчика ошибок установлена с помощью
set_error_handler(), она всё равно будет вызываться,
даже если диагностика была подавлена.

Внимание

До версии PHP 8.0.0 функция error_reporting(), вызываемая внутри пользовательского обработчика ошибок,
всегда возвращала 0, если ошибка была подавлена оператором @.
Начиная с PHP 8.0.0, она возвращает значение E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE.

Любое сообщение об ошибке, сгенерированное выражением, доступно
в элементе массива "message", возвращаемого error_get_last().
Результат этой функции будет меняться при каждой ошибке, поэтому его необходимо проверить заранее.

<?php
// Преднамеренная ошибка при работе с файлами
$my_file = @file ('non_existent_file') or
die (
"Ошибка при открытии файла: сообщение об ошибке было таким: '" . error_get_last()['message'] . "'");// работает для любых выражений, а не только для функций
$value = @$cache[$key];
// В случае если ключа $key нет, сообщение об ошибке (notice) не будет отображено?>

Замечание:

Оператор @ работает только с
выражениями.
Есть простое правило: если что-то возвращает
значение, значит вы можете использовать перед ним оператор
@. Например, вы можете использовать @ перед
именем переменной, произвольной функцией или вызовом include и так далее. В то же время вы не можете использовать этот оператор
перед определением функции или класса, условными конструкциями, такими как if,
foreach и т.д.

Внимание

До PHP 8.0.0 оператор @ мог подавлять критические ошибки, которые прерывали выполнение скрипта.
Например, добавление @ к вызову несуществующей функции,
в случае, если она недоступна или написана неправильно, дальнейшая
работа скрипта приведёт к прерыванию выполнения скрипта без каких-либо уведомлений.

taras dot dot dot di at gmail dot com

15 years ago

I was confused as to what the @ symbol actually does, and after a few experiments have concluded the following:

* the error handler that is set gets called regardless of what level the error reporting is set on, or whether the statement is preceeded with @

* it is up to the error handler to impart some meaning on the different error levels. You could make your custom error handler echo all errors, even if error reporting is set to NONE.

* so what does the @ operator do? It temporarily sets the error reporting level to 0 for that line. If that line triggers an error, the error handler will still be called, but it will be called with an error level of 0

Hope this helps someone

M. T.

13 years ago

Be aware of using error control operator in statements before include() like this:

<?PHP(@include("file.php"))
OR die(
"Could not find file.php!");?>

This cause, that error reporting level is set to zero also for the included file. So if there are some errors in the included file, they will be not displayed.

Anonymous

10 years ago

This operator is affectionately known by veteran phpers as the stfu operator.

anthon at piwik dot org

12 years ago

If you're wondering what the performance impact of using the @ operator is, consider this example. Here, the second script (using the @ operator) takes 1.75x as long to execute...almost double the time of the first script.

So while yes, there is some overhead, per iteration, we see that the @ operator added only .005 ms per call. Not reason enough, imho, to avoid using the @ operator.

<?php

function x() { }

for (
$i = 0; $i < 1000000; $i++) { x(); }

?>



real 0m7.617s

user 0m6.788s

sys 0m0.792s

vs

<?php

function x() { }

for (
$i = 0; $i < 1000000; $i++) { @x(); }

?>



real 0m13.333s

user 0m12.437s

sys 0m0.836s

gerrywastaken

14 years ago

Error suppression should be avoided if possible as it doesn't just suppress the error that you are trying to stop, but will also suppress errors that you didn't predict would ever occur. This will make debugging a nightmare.

It is far better to test for the condition that you know will cause an error before preceding to run the code. This way only the error that you know about will be suppressed and not all future errors associated with that piece of code.

There may be a good reason for using outright error suppression in favor of the method I have suggested, however in the many years I've spent programming web apps I've yet to come across a situation where it was a good solution. The examples given on this manual page are certainly not situations where the error control operator should be used.

jcmargentina at gmail dot com

4 years ago

Please be aware that the behaviour of this operator changed from php5 to php7.

The following code will raise a Fatal error no matter what, and you wont be able to suppress it

<?phpfunction query()
{
$myrs = null;
$tmp = @$myrs->free_result();

return

$tmp;
}
var_dump(query());

echo

"THIS IS NOT PRINT";
?>

more info at: https://bugs.php.net/bug.php?id=78532&thanks=3

dkellner

7 years ago

There is no reason to NOT use something just because "it can be misused". You could as well say "unlink is evil, you can delete files with it so don't ever use unlink".

It's a valid point that the @ operator hides all errors - so my rule of thumb is: use it only if you're aware of all possible errors your expression can throw AND you consider all of them irrelevant.

A simple example is
<?php

$x

= @$a["name"];?>
There are only 2 possible problems here: a missing variable or a missing index. If you're sure you're fine with both cases, you're good to go. And again: suppressing errors is not a crime. Not knowing when it's safe to suppress them is definitely worse.

man13or at hotmail dot fr

4 years ago

Quick debugging methods :

@print($a);
is equivalent to
if isset($a) echo $a ;

@a++;
is equivalent to
if isset($a) $a++ ;
else $a = 1;

Ryan C

2 years ago

It's still possible to detect when the @ operator is being used in the error handler in PHP8. Calling error_reporting() will no longer return 0 as documented, but using the @ operator does still change the return value when you call error_reporting().

My PHP error settings are set to use E_ALL, and when I call error_reporting() from the error handler of a non-suppressed error, it returns E_ALL as expected.

But when an error occurs on an expression where I tried to suppress the error with the @ operator, it returns: E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR (or the number 4437).

I didn't want to use 4437 in my code in case it changes with different settings or future versions of PHP, so I now use:

<?php
function my_error_handler($err_no, $err_msg, $filename, $linenum) {
if (
error_reporting() != E_ALL) {
return
false; // Silenced
}// ...
}
?>

If the code needs to work with all versions of PHP, you could check that error_reporting() doesn't equal E_ALL or 0.

And, of course, if your error_reporting settings in PHP is something other than E_ALL, you'll have to change that to whatever setting you do use.

darren at powerssa dot com

13 years ago

After some time investigating as to why I was still getting errors that were supposed to be suppressed with @ I found the following.

1. If you have set your own default error handler then the error still gets sent to the error handler regardless of the @ sign.

2. As mentioned below the @ suppression only changes the error level for that call. This is not to say that in your error handler you can check the given $errno for a value of 0 as the $errno will still refer to the TYPE(not the error level) of error e.g. E_WARNING or E_ERROR etc

3. The @ only changes the rumtime error reporting level just for that one call to 0. This means inside your custom error handler you can check the current runtime error_reporting level using error_reporting() (note that one must NOT pass any parameter to this function if you want to get the current value) and if its zero then you know that it has been suppressed.
<?php
// Custom error handler
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (
0 == error_reporting () ) {
// Error reporting is currently turned off or suppressed with @
return;
}
// Do your normal custom error reporting here
}
?>

For more info on setting a custom error handler see: http://php.net/manual/en/function.set-error-handler.php
For more info on error_reporting see: http://www.php.net/manual/en/function.error-reporting.php

auser at anexample dot com

13 years ago

Be aware that using @ is dog-slow, as PHP incurs overhead to suppressing errors in this way. It's a trade-off between speed and convenience.

bohwaz

12 years ago

If you use the ErrorException exception to have a unified error management, I'll advise you to test against error_reporting in the error handler, not in the exception handler as you might encounter some headaches like blank pages as error_reporting might not be transmitted to exception handler.

So instead of :

<?phpfunction exception_error_handler($errno, $errstr, $errfile, $errline )
{
throw new
ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

function

catchException($e)
{
if (
error_reporting() === 0)
{
return;
}
// Do some stuff
}set_exception_handler('catchException');?>

It would be better to do :

<?phpfunction exception_error_handler($errno, $errstr, $errfile, $errline )
{
if (
error_reporting() === 0)
{
return;
}

throw new

ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

function

catchException($e)
{
// Do some stuff
}set_exception_handler('catchException');?>

programming at kennebel dot com

16 years ago

To suppress errors for a new class/object:

<?php
// Tested: PHP 5.1.2 ~ 2006-10-13

// Typical Example

$var = @some_function();// Class/Object Example
$var = @new some_class();// Does NOT Work!
//$var = new @some_class(); // syntax error
?>

I found this most useful when connecting to a
database, where i wanted to control the errors
and warnings displayed to the client, while still
using the class style of access.

frogger at netsurf dot de

18 years ago

Better use the function trigger_error() (http://de.php.net/manual/en/function.trigger-error.php)
to display defined notices, warnings and errors than check the error level your self. this lets you write messages to logfiles if defined in the php.ini, output
messages in dependency to the error_reporting() level and suppress output using the @-sign.

karst dot REMOVETHIS at onlinq dot nl

8 years ago

While you should definitely not be too liberal with the @ operator, I also disagree with people who claim it's the ultimate sin.

For example, a very reasonable use is to suppress the notice-level error generated by parse_ini_file() if you know the .ini file may be missing.
In my case getting the FALSE return value was enough to handle that situation, but I didn't want notice errors being output by my API.

TL;DR: Use it, but only if you know what you're suppressing and why.

ricovox

6 years ago

What is PHP's behavior for a variable that is assigned the return value of an expression protected by the Error Control Operator when the expression encounteres an error?

Based on the following code, the result is NULL (but it would be nice if this were confirmed to be true in all cases).

<?php

$var

= 3;
$arr = array(); $var = @$arr['x']; // what is the value of $var after this assignment?

// is it its previous value (3) as if the assignment never took place?
// is it FALSE or NULL?
// is it some kind of exception or error message or error number?

var_dump($var); // prints "NULL"?>

fy dot kenny at gmail dot com

3 years ago

* How to make deprecated super global variable `$php_errormsg` work

>1. modify php.ini
>track_errors = On
>error_reporting = E_ALL & ~E_NOTICE
>2. Please note,if you already using customized error handler,it will prompt `undefined variable`
>please insert code`set_error_handler(null);` before executing code, e.g:
>```php
>set_error_handler(null);
>$my_file = @file ('phpinfo.phpx') or
>die ("<br>Failed opening file: <br>\t$php_errormsg");
>```

>(c)Kenny Fang

manisha at mindfiresolutions dot com

8 years ago

Prepending @ before statement like you are doing a crime with yourself.

Joey

5 years ago

In PHP it is extremely beneficial to turn all notices into exceptions. This helps in creating bug free code through finding errors sooner rather than later. It also helps reduce the impact of bugs as code when entering an erroneous state ends sooner rather than later and at all. In the worst case without that you can have much more scenarios where code fails yet appears as though it succeeded.

However there are rare cases in which notices and warnings are produced where the above behavour might be unproductive. Worse yet your error handling will kick out that exception before the function gets to return.

They are rare cases such as socket handling where certain states are expressed through errors causing ambiguity.

Anonymous

9 years ago

I was wondering if anyone (else) might find a directive to disable/enable to error operator would be a useful addition. That is, instead of something like (which I have seen for a few places in some code):

<?phpif (defined(PRODUCTION)) {
@function();
}
else {
function();
}
?>

There could be something like this:

<?phpif (defined(PRODUCTION)) {
ini_set('error.silent',TRUE);
}
else {
ini_set('error.silent',FALSE);
}
?>

nospam at blog dot fileville dot net

16 years ago

If you want to log all the error messages for a php script from a session you can use something like this:
<?php
session_start
();
function
error($error, $return=FALSE) {
global
$php_errormsg;
if(isset(
$_SESSION['php_errors'])) {
$_SESSION['php_errors'] = array();
}
$_SESSION['php_errors'][] = $error; // Maybe use $php_errormsg
if($return == TRUE) {
$message = "";
foreach(
$_SESSION['php_errors'] as $php_error) {
$messages .= $php_error."\n";
}
return
$messages; // Or you can use use $_SESSION['php_errors']
}
}
?>
Hope this helps someone...

Anonymous

16 years ago

error_reporting()==0 for detecting the @ error suppression assumes that you did not set the error level to 0 in the first place.

However, typically if you want to set your own error handler, you would set the error_reporting to 0. Therefore, an alternative to detect the @ error suppression is required.

me at hesterc dot fsnet dot co dot uk

18 years ago

If you wish to display some text when an error occurs, echo doesn't work. Use print instead. This is explained on the following link 'What is the difference between echo and print?':

http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

It says "print can be used as part of a more complex expression where echo cannot".

Also, you can add multiple code to the result when an error occurs by separating each line with "and". Here is an example:

<?php
$my_file
= @file ('non_existent_file') or print 'File not found.' and $string = ' Honest!' and print $string and $fp = fopen ('error_log.txt', 'wb+') and fwrite($fp, $string) and fclose($fp);
?>

A shame you can't use curly brackets above to enclose multiple lines of code, like you can with an if statement or a loop. It could make for a single long line of code. You could always call a function instead.

Кроме вышесказанного от @dekameron хочу добавить про обработчик ошибок/исключений. PHP позволяет устанавливать обработчики ошибок, которые, в свою очередь, позволяют оформить или проигнорировать ошибку:

function myErrorHandler($errno, $errstr, $errfile=null, $errline=null, array $errcontext=array())
{
    // внутри реализуется любая логика
    // например, надо останавливаться только на пользовательских ошибках
    if ($errno === E_USER_ERROR) {
       echo 'User error occurred';
       return false; // передать обработку следующему обработчику в стеке
       // в этом случае это будет стандартный обработчик PHP
    }
    return true; // ошибка не будет передаваться дальше и будет считаться обработанной
}

set_error_handler('myErrorHandler');
trigger_error('Invisible notice', E_USER_NOTICE); // ничего не выведет
trigger_error('Visible error', E_USER_ERROR); // выведет ошибку и передаст ее обычному обработчику

Таким образом, можно просто глушить все ошибки, кроме фатальных
подробнее можно почитать в доках

Кроме ошибок есть еще незатронутые исключения — исключения в каком-то роде представляют собой продвинутую ошибку, которую можно ожидать.

try { // пробуем 
    $statement = $pdo->prepare($query);
    $statement->bindValue(':price', $price);
    $statement->bindValue(':product', $product);
    $statement->execute();
} catch (PDOException $e) { // ожидаем исключение типа PDOException
    // Здесь начинает выполняться catch-блок - ура, значит все упало! Грамотно обрабатываем ошибку и завершаем скрипт, ЕСЛИ это необходимо.
    User::sendFlashMessage('Whoops, an error has occured!', User::FLASH_ERROR);
    Logger::log('Couldn\'t update price to {price} for {product}, array('price' => $price, 'product' => $product));
}

Чем подход с исключениями лучше и почему я вообще на нем остановился:

  • Можно обрабатывать конкретные типы ошибок, оставляя все остальные более высоким уровням. Таким образом можно легко разделить низкоуровневые «база не смогла вставить значения» и «данные выходят за разумные пределы», чтобы в первом случае вывести ошибку базы данных, а во втором — сообщить пользователю о том, что он предоставил неверные данные.
  • Обработка ошибок и сами ошибки могут быть разделены несколькими слоями кода, и заботиться о них становится проще
  • Исключения, как и любой класс, легко наследуются, что позволяет расщепить любое исключение на несколько дочерних, но ловить их все равно всех вместе:

.

class DbConnectionRefusedException extends DbException {}
class DbTransactionFailedException extends DbException {}
class DbInvalidCredentialsException extends DbException {}

try {
    $db = Db::connect();
    $db->insert('supertable', array('data' => 'somedata'));
} catch (DbException $e) { // словит указанное исключение и всех наследников
}
  • Указанная в вопросе задача с мьютированием решается парой строчек, как в примере выше — достаточно пустого блока catch (ExceptionClass $e) {}, чтобы заглушить исключение. Другое дело, что подобные пустые блоки могут вызвать впоследствии некислую головную боль
  • Все исключения ловятся «на местах», а на верхнем уровне остается один глобальный обработчик, который выведет красивую страницу 500 и залогирует трейс.
  • Не очень относится к PHP, нос помощью try-catch можно задавать поведение приложения и просто ловить на верхнем уровне какой-нибудь ValidationException

Как это относится к коду с обычноми ошибками вместо исключений? В PHP (сообществе, не языке самом) принято конвертировать обычные ошибки в исключения ErrorException с помощью установки обработчика (который состоит буквально из одной строчки throw new ErrorException(...);). Кроме того, ошибки постепенно вытесняются из PHP — медленно, но вы не увидите ни одного современного проекта, который использует ошибки, а не исключения, и «глушилка» (@) стоит обычно только на session_start() (и то зря). Рекомендую в части БД сразу перейти на PDO, который будет стрелять PDOException «из коробки».

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

Note: Firstly, I realise 99% of PHP developers use the error suppression operator (I used to be one of them), so I’m expecting any PHP dev who sees this to disagree.

In your opinion, is it ever valid to use the @ operator to suppress an error/warning in PHP whereas you may be handling the error?

Short answer:
No!

Longer more correct answer:
I don’t know as I don’t know everything, but so far I haven’t come across a situation where it was a good solution.

Why it’s bad:
In what I think is about 7 years using PHP now I’ve seen endless debugging agony caused by the error suppression operator and have never come across a situation where it was unavoidable.

The problem is that the piece of code you are suppressing errors for, may currently only cause the error you are seeing; however when you change the code which the suppressed line relies on, or the environment in which it runs, then there is every chance that the line will attempt to output a completely different error from the one you were trying to ignore. Then how do you track down an error that isn’t outputting? Welcome to debugging hell!

It took me many years to realise how much time I was wasting every couple of months because of suppressed errors. Most often (but not exclusively) this was after installing a third party script/app/library which was error free in the developers environment, but not mine because of a php or server configuration difference or missing dependency which would have normally output an error immediately alerting to what the issue was, but not when the dev adds the magic @.

The alternatives (depending on situation and desired result):
Handle the actual error that you are aware of, so that if a piece of code is going to cause a certain error then it isn’t run in that particular situation. But I think you get this part and you were just worried about end users seeing errors, which is what I will now address.

For regular errors you can set up an error handler so that they are output in the way you wish when it’s you viewing the page, but hidden from end users and logged so that you know what errors your users are triggering.

For fatal errors set display_errors to off (your error handler still gets triggered) in your php.ini and enable error logging. If you have a development server as well as a live server (which I recommend) then this step isn’t necessary on your development server, so you can still debug these fatal errors without having to resort to looking at the error log file. There’s even a trick using the shutdown function to send a great deal of fatal errors to your error handler.

In summary:
Please avoid it. There may be a good reason for it, but I’m yet to see one, so until that day it’s my opinion that the (@) Error suppression operator is evil.

You can read my comment on the Error Control Operators page in the PHP manual if you want more info.

Оператор подавления ошибок в PHP

В PHP имеется оператор подавления ошибок. В большинстве случаев это нужно для того, чтобы по-своему обработать ошибку. Давайте разберём с Вами оператор подавления ошибок в PHP более подробно.

Оператор подавления ошибок (пишется он так «@«) служит для запрета вывода информации об этих ошибках. Использовать данный оператор можно рядом с тем, что возвращает результат. Например, перед различными функциями, переменными и прочим. Перед служебными конструкциями его нельзя использовать, поскольку они ничего не возвращают. К таким конструкциям относятся циклы, условные операторы, объявления функций и классов.

Теперь пример использования оператора подавления ошибок в PHP:

<?php
  $handler = @fopen("my_file.txt", "r");
  if (!$handler) echo "Ошибка при открытии файла";

Файла my_file.txt не существует. И если мы уберём «@«, то у нас выведется ошибка, которая нам совсем не нужна, поскольку мы по-своему обрабатываем случай, если файл не открывается или не существует.

Второй очень популярный пример использования «@» при подключении к базе данных:

<?php
  $mysqli = @new mysqli("localhost", "root", "123", "mydb");
  if ($mysqli->connect_errno) echo "Ошибка при подключении";

В данном случае мы указали неверные данные для подключения к базе данных. Если мы уберём «@«, то PHP нам сразу же выведет ошибку. Однако, мы хотим её обработать сами, поэтому ставим оператор подавления ошибок, а после уже смотрим: возникли ошибки или нет.

Я показал только 2 самых популярных примера использования оператора подавления ошибок в PHP, на практике же есть ещё масса примеров использования данного оператора. Однако, использовать его только для того, чтобы убрать постоянно возникающие ошибки на сайте, не стоит, так как это уже, скорее всего, ошибка в самом коде.

  • Создано 14.06.2013 04:23:49


  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):
  • zelenin

Я часто вижу, что пишут примерно такой код.

if(isset($arr['a']) && isset($arr['a']['b']) && isset($arr['a']['b']['c'])) {
    $v = $arr['a']['b']['c'];
}
else {
    $v = null;
}

Но ведь тоже самое, можно написать компактнее, воспользовавшись подавлением ошибки доступа к элементам массива. В случае ошибки будет возвращен null.
$v = @$arr['a']['b']['c'];
Почему многие предпочитают первый способ? Религия не позволяет использовать подавление ошибок даже для минимального выражения? Или есть еще какие-то причины?


  • Вопрос задан

  • 3081 просмотр

Пригласить эксперта

Не знаю насчет религии, но точно можно было бы обойтись одним isset($arr['a']['b']['c']) в условии.

если есть ошибка, ее нужно устранить, а не подавить. Подавление ошибок — один из признаков говнокода.

$v = isset($arr['a']['b']['c']) ? $arr['a']['b']['c'] : null;

вот здесь автор предлагает несколько решений, объясняет подводные камни nikic.github.io/2014/01/10/The-case-against-the-if…

а если начать использовать @, то можно потерять действительно нужные ошибки и отладка станет очень тяжелой. Представьте, ничего плохого не произойдёт, если вы одну-единственную переменную в проекте назовёте $a;Но если таких переменных будет много, код станет невыносимым. Здесь похоже такая же логика.

$arr[$tables[$t][‘name’]][‘rows’][$r][‘cols’][$c][‘format’][‘borders’][‘top’] — это конечно 3.14здец товарищи, но такая конструкция мне никогда не встречалась.

Есть несколько причин:

1) Наглядно видно что происходит в скрипте (есть ключ? нет — ставим default)
2) Упрощает отладку в дальнейшем. «@» скрывает ВСЕ ошибки.
3) Потому, что оператор «@» замедляет выполнение конструкции вида iffset(key) ? key : default в два раза. Даже если ошибки не возникает.

И если уж исходить из редких ситуаций. Представьте насколько замедлится скрипт при прохождении 100000 элементов.

if(isset($arr['a']['b']['c'])) {
    $v = $arr['a']['b']['c'];
}
else {
    $v = null;
}
$v = isset($arr['a']['b']['c']) ? $arr['a']['b']['c'] : null;

Потому что:
1) сразу понятно что имелось ввиду
2) быстрее
3) ошибки нужно не допускать, а допускать и подавлять сознательно — очень плохой тон, не сразу понятно что вы ожидали получить в результате, это быдлокод, не поддающийся отладке
4) становится похоже на то, что вы вообще не понимаете, что происходит и решили просто убрать отображение ошибки, то что вы там ожидаете null не очевидно чуть менее чем полностью

$arr[$tables[$t]['name']]['rows'][$r]['cols'][$c]['format']['borders']['top']

Страшновато, но программирование не всегда белое и пушистое. Можно либо циклом проверять, либо заняться рефакторингом и сделать более удобную для работы структуру.


  • Показать ещё
    Загружается…

23 сент. 2023, в 01:31

6000 руб./за проект

23 сент. 2023, в 01:13

3000 руб./за проект

22 сент. 2023, в 23:30

6500 руб./за проект

Минуточку внимания

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Пропуск тире это какая ошибка
  • Пропуск союза какая ошибка
  • Пропуск предлога это какая ошибка
  • Пропуск слова это грамматическая или речевая ошибка
  • Пропуск слова тип ошибки

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии