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

  • Автор темы Frfr
  • 72
  • Обновлено
  • 12, May 2024
  • #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: Теперь я вижу это:

 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');
Код (разметка): любая помощь в устранении этой ошибки приветствуется.

Frfr


Рег
09 Nov, 2012

Тем
1

Постов
2

Баллов
12
  • 21, May 2024
  • #2
Одно из двух ваших применений 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++.

Кроме того, я не думаю, что твоих навыков программирования достаточно, чтобы заниматься таким программированием.

Извините за это...
 

yastix


Рег
08 May, 2011

Тем
2

Постов
3

Баллов
23
  • 22, May 2024
  • #3
Было бы трудно понять, чтобы увидеть, каковы значения, вы можете их сбросить.
 
var_dump($config['video_play_price']);
var_dump($video->video_play_price);
// And maybe die?
die();
Код (разметка): это даст вам представление о том, что это за значения и являются ли они целыми числами или нет.
 

Dozvonov


Рег
12 Nov, 2010

Тем
1

Постов
3

Баллов
13
  • 02, Jun 2024
  • #4
Вы включили строгие типы, которые влияют на приведение типов (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().
 

Elka1


Рег
30 Jul, 2012

Тем
1

Постов
2

Баллов
12
  • 09, Jun 2024
  • #5
Попробуйте изменить его на
 
'PRICE' => number_format($config['video_play_price'] ? $config['video_play_price'] : $video->video_play_price)
Код (разметка): Это может сработать, но трудно понять, не видя остального кода.
 

relax1


Рег
05 Oct, 2014

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно