Умножьте float (7.2) для simpleXML с PHP5.6 - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь выполнить простое умножение в объектно-ориентированном проекте PHP для файла XML.

В MariaDB данные сохраняются как float (8.2).Я получаю эту ошибку:

Объект класса ArticlePrice не может быть преобразован в int в [file online ...]

$item->addChild('price', $article->getPrice(CountryPublic::getByShortCut('a')));
$item->addChild('newPrice', $productPriceNew*1.8);

Затем я попытался преобразоватьэто плавать (вместо минифлота) так:

$productPrice = $article->getUsualPrice(CountryPublic::getByShortCut('a'));
$productPriceNew = (float)$productPrice*1.8; 

Я получаю следующее сообщение:

Объект класса ArticlePrice не может быть преобразован в double в

Что я делаю не так?

1 Ответ

0 голосов
/ 15 декабря 2018

вы на самом деле пытаетесь бросить объект в число с плавающей точкой.

$article->getUsualPrice(CountryPublic::getByShortCut('a'));

Ваш метод getUsualPrice возвращает объект ArticlePrice, вы должны поместить получатель в свой класс ArticlePrice, чтобы получить доступ к вашему атрибутуprice внутри, а затем бросить его в поплавок.

Это простое решение, но, вероятно, не самое красивое с точки зрения концепции.

если вы попробуете что-то вроде

var_dump($article->getUsualPrice(CountryPublic::getByShortCut('a')) instanceof ArticlePrice)

Вы увидите, что вы бросили объект в float.

После вашего комментария

object(ArticlePrice)#11396 (15) { 
    ["id":protected]=> string(36) "7f01d63a-3f08-480a-b798-c83f6ddbdb94" 
    ["articleID":protected]=> string(36) "65983c99-66e4-43689ba7039dc5e742c0" 
    ["countryID":protected]=> string(36) "31149178-8a2a-4e57-8133-ca12004a59dd" 
    ["price":protected]=> string(5) "13.50"

Вы видите, что попали на аттрибут под названием цена.

вам нужно только выполнить операцию с этим атрибутом, а не с вашим объектом.вы, вероятно, имеете в своем классе getter, который называется getPrice ().

Будет работать следующий код:

(float)$article->getPrice(CountryPublic::getByShortCut('a'))->getPrice()

, но вам, вероятно, потребуется время, чтобы подумать о названии вашегометод, избыточно иметь два метода с именем getPrice()

...