我正在尝试在面向对象的PHP项目中对XML文件进行简单的乘法。
在MariaDB中,数据另存为float(8.2)。我收到此错误:
在[在线文件...]中无法将ArticlePrice类的对象转换为int
$item->addChild('price', $article->getPrice(CountryPublic::getByShortCut('a')));
$item->addChild('newPrice', $productPriceNew*1.8);
然后我尝试将其转换为float(而不是minifloat),如下所示:
$productPrice = $article->getUsualPrice(CountryPublic::getByShortCut('a'));
$productPriceNew = (float)$productPrice*1.8;
我收到的消息是这样的:
ArticlePrice类的对象无法转换为double in
我在做什么错了?
答案 0 :(得分:1)
您实际上尝试将对象转换为浮动对象。
$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"
您看到自己具有称为价格的属性。
您只需要对该属性进行操作,而无需对您的对象进行操作。 您可能在类上有一个名为getPrice()的吸气剂。
以下代码将起作用:
(float)$article->getPrice(CountryPublic::getByShortCut('a'))->getPrice()
但是您可能需要花点时间考虑一下方法的名称,拥有两个名为getPrice()
的方法是多余的