将simpleXML的浮点(7.2)与PHP5.6相乘

将simpleXML的浮点(7.2)与PHP5.6相乘,php,oop,floating-point,type-conversion,int,Php,Oop,Floating Point,Type Conversion,Int,我试图在一个面向对象的PHP项目中为XML文件做一个简单的乘法运算 在MariaDB中,数据保存为浮点(8.2)。我得到这个错误: 无法在[file online…]中将ArticlePrice类的对象转换为int 然后我尝试将其转换为float(而不是minifalot),如下所示: $productPrice = $article->getUsualPrice(CountryPublic::getByShortCut('a')); $productPriceNew = (float)$

我试图在一个面向对象的PHP项目中为XML文件做一个简单的乘法运算

在MariaDB中,数据保存为浮点(8.2)。我得到这个错误:

无法在[file online…]中将ArticlePrice类的对象转换为int

然后我尝试将其转换为float(而不是minifalot),如下所示:

$productPrice = $article->getUsualPrice(CountryPublic::getByShortCut('a'));
$productPriceNew = (float)$productPrice*1.8; 
我得到的信息是:

ArticlePrice类的对象在中无法转换为double


我做错了什么?

您实际上试图将对象投射到浮动中

$article->getUsualPrice(CountryPublic::getByShortCut('a'));
你的方法
getUsualPrice
返回一个对象
ArticlePrice
,你应该在你的类
ArticlePrice
上放置一个getter来访问它里面的属性
price
,然后将它转换成浮点数

$article->getUsualPrice(CountryPublic::getByShortCut('a'));
这是一个直截了当的解决方案,但就概念而言,可能不是最美的

如果你尝试像

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()的getter

以下代码将正常工作:

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

但是您可能需要花点时间考虑一下方法的名称,在第
$productPriceNew=(float)$productPrice*1.8行之前有两个名为
getPrice()

write
var\u dump($productPrice)
的方法是多余的输出是什么?哪一行出现了错误?看起来您的
getPrice
getUsualPrice
方法返回的是类对象,而不是数字。您的
ArticlePrice
类是否有一种方法可以将价格作为数字获取?你需要调用它。
ArticlePrice
不是一个标准的PHP类,我们只能猜测它是如何工作的。始终使用$productPriceNew的最后一行得到错误谢谢,但我如何才能做到这一点?
article->getUsualPrice(CountryPublic::getByShortCut('a')
返回对象ArticlePrice。向对象
ArticlePrice
添加一个新方法,如
getAmount()
,该方法返回包含价格的属性。因此,您可以编写类似于
(float)$article->getUsualPrice(CountryPublic::getByShortCut('a'))->getAmount()的内容