Помощь с фатальной ошибкой: Uncaught TypeError: number_format() ожидает параметр 1

  • Автор темы Frfr
  • 61
  • Дата начала

Frfr

Пользователь
Регистрация
09.11.12
Сообщения
2
Реакции
0
Баллы
1
Я использую веб-скрипт PHP, который работает успешно. Но когда я добавил это:



Код:
$html_videos = '';
if (!empty($videos)) { foreach ($videos as $key => $video) { $video = PT_GetVideoByID($video, 0, 0, 0); $html_videos .= PT_LoadPage('videos/list', array( 'ID' => $video->id, 'VID_ID' => $video->id, 'TITLE' => $video->title, 'VIEWS' => $video->views, 'VIEWS_NUM' => number_format($video->views), 'USER_DATA' => $video->owner, 'THUMBNAIL' => $video->thumbnail, 'URL' => $video->url, 'TIME' => $video->time_ago, 'DURATION' => $video->duration, 'PRICE' => number_format($video->video_play_price<$config['video_play_price'] ? $config['video_play_price'] : $video->video_play_price) )); }
}


PHP: Теперь я вижу это:
Помощь с фатальной ошибкой: Uncaught TypeError: number_format() ожидает параметр 1
Fatal error: Uncaught TypeError: number_format() expects parameter 1 to be float, string given in /home/public_html/sources/videos/content.php:136 Stack trace: #0 /home/public_html/sources/videos/content.php(136): number_format('2.00') #1 /home/public_html/index.php(57): include('/home/.....') #2 {main} thrown in /home/public_html/sources/videos/content.php on line 136
PHP: относительно последней строки кода здесь:

declare( strict_types=1); error_reporting(-1); ini_set('display_errors' , 'true');
Код (разметка): любая помощь в устранении этой ошибки приветствуется.
 

yastix

Пользователь
Регистрация
08.05.11
Сообщения
3
Реакции
0
Баллы
1
Одно из двух ваших применений Number_format возвращает «строку» вместо «числа».
Строка может быть пустой.

Или
'VIEWS_NUM' => числовой формат($video->просмотры),
или
'ЦЕНА' => number_format($video->video_play_price<$config['video_play_price'] ? $config['video_play_price'] : $video->video_play_price)

Ваше $video — это переменная класса, вероятно, результат запроса, отправленного ранее в базу данных...
Вы должны прочитать это, получая значения float и int из строковых переменных:
https://www.php.net/manual/en/function.floatval.php


Вы можете игнорировать ошибку, поместив весь код в блок try/catch, который перехватит ошибку, и вы можете ничего не делать с ней.
Однако игнорировать ошибку, если вы ее заметили, не очень хорошая практика.


Кстати, с этим строгим режимом вам предстоит много работы.
Хорошо, что скрипт будет намного мощнее, как хардкорный скрипт JAVA/c++.
Кроме того, я не думаю, что твоих навыков программирования достаточно, чтобы заниматься таким программированием... Извините за это...
 

Dozvonov

Пользователь
Регистрация
12.11.10
Сообщения
3
Реакции
0
Баллы
1
Было бы трудно понять, чтобы увидеть, каковы значения, вы можете их сбросить.
Код:
var_dump($config['video_play_price']);
var_dump($video->video_play_price);
die();
Код (разметка): это даст вам представление о том, что это за значения и являются ли они целыми числами или нет.
 

Elka1

Пользователь
Регистрация
30.07.12
Сообщения
2
Реакции
0
Баллы
1
Адрес
Тюмень
Вы включили строгие типы, которые влияют на приведение типов (https://stackoverflow.com/questions/48723637/what-does-strict-types-do-in-php/53786924#53786924)

Number_format() принимает int, но вы, похоже, передаете bool

Код:
number_format($video->video_play_price < $config['video_play_price'] ? $config['video_play_price'] : $video->video_play_price)
Код (разметка): он проверяет, меньше ли '$video->video_play_price' результата оператора if '$config['video_play_price'] ? $config['video_play_price'] : $video->video_play_price' и возвращает true или false, что работало раньше, поскольку оно конвертировалось в 0 или 1, а затем анализировалось функцией Number_format().
 

relax1

Пользователь
Регистрация
05.10.14
Сообщения
3
Реакции
0
Баллы
1
Попробуйте изменить его на
Код:
'PRICE' => number_format($config['video_play_price'] ? $config['video_play_price'] : $video->video_play_price)
Код (разметка): Это может сработать, но трудно понять, не видя остального кода.
 
Сверху Снизу