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

F

Frfr

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

yastix

#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++.
Кроме того, я не думаю, что твоих навыков программирования достаточно, чтобы заниматься таким программированием... Извините за это...
 
D

Dozvonov

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

Elka1

#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().
 
R

relax1

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

Here you can only see a limited number of comments. On СЕО Форум Вебмастеров you see all comments and all functions are available to you. To the thread