#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. Не уверен, что вы имеете в виду, но обратите внимание, что все работает, даже несмотря на то, что это предупреждения.