Предупреждения PHP, это нормально?

#php #warnings

#php #предупреждения

Вопрос:

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

 $image_size = getimagesize($data[$module['_attr']['id']]); <-- works but gives warning (Filename cannot be empty)

echo call_user_func($module['_attr']['type'],$module); <-- works but gives warning (First argument is expected to be a valid callback)
  

Итак, я прихожу к выводу, что ему не нравятся передаваемые переменные или элементы массива. Или я делаю что-то не так?

Спасибо!

Комментарии:

1. Весьма вероятно, что $data[$module['_attr']['id'] пусто. Вы сделали тестовый вывод?

2. Когда вы говорите getimagesize «работает», что вы имеете в виду под этим и откуда вы знаете? Звучит так, как будто оно пустое, как говорится в предупреждении.

3. обе функции работают так, как в я получу массив размера в $image_size, и функция echo действительно работает, поскольку я вижу, как она извлекает данные. Нет, они не пустые, уверен на 110%.

Ответ №1:

Я предполагаю, что $data[$module['_attr']['id']] пусто (оно не содержит пути к какому-либо файлу) — что объясняет первое предупреждение.

И $module['_attr']['type'] вероятно, не содержит допустимого имени функции — что объяснило бы второе предупреждение.

Попробуйте использовать что-то подобное, чтобы узнать, что на самом деле в $module и $data :

 var_dump($module, $data);
  

Примечания :

  • Эти предупреждения указывают на то, что ваш код не работает : он делает не то, что вы хотите, чтобы он делал — вероятно, мало что делает, учитывая предупреждения.
  • Но предупреждения не являются фатальной ошибкой: выполнение скрипта продолжается; даже если есть какая-то проблема, которая может привести к проблемам позже.

Комментарии:

1. call_user_func принимает имя функции в виде строки, и это именно то, что я передал ей в элементе массива.

2. Что ж, в предупреждении говорится, что то, что передается call_user_func , не является допустимым обратным вызовом ; это означает, что, даже если это строка, это имя допустимой функции (если это имя функции, определенной в другом файле, убедитесь, что этот файл включен, поэтому функция известна PHP)

3. Таким образом, возможно, что он выдает предупреждение о том, что это недопустимый обратный вызов, но он все еще работает? Я работаю с несколькими php-файлами, и все они включены. По сути, $data — это большой массив, содержащий данные имен функций… Итак, когда я вызываю «call_user_func», я просто ввожу имя функции из элемента массива $data … Ничего сумасшедшего там нет… Я мог бы легко заменить массив фактическим именем функции, и это также сработало бы, и предупреждение исчезло. Но поскольку код выполняется через цикл, имя функции из $ data отличается, поэтому я передаю в массив.

4. Вы действительно уверены , что функция действительно вызвана?

Ответ №2:

Вы уверены, что ваш скрипт работает?

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

Второе, потому что первым аргументом ДОЛЖНА быть функция. Является ли $module[‘_attr’][‘type’] функцией?

Вы отлаживаете эти переменные?

Комментарии:

1. да, все работает… 2-го я передаю имя функции, хранящееся в массиве, поэтому вместо того, чтобы указывать call_user_function(‘name’,$variable), я заменяю ‘name’ именем внутри элемента массива $module[‘_attr’][‘type’]

2. Эта функция находится в той же области действия скрипта?

3. Не уверен, что вы имеете в виду, но обратите внимание, что все работает, даже несмотря на то, что это предупреждения.