为了账号安全,请及时绑定邮箱和手机立即绑定

PHP魔术方法__toNumber()将对象转换为数字

PHP魔术方法__toNumber()将对象转换为数字

PHP
神不在的星期二 2021-06-30 13:23:40
有没有办法在PHP中实现对象到数字的转换?有一个方便的魔术函数__toString()可以将对象转换为字符串,但是如何将对象转换为数字呢?使用示例:<?phpclass Foo{    /**     * @var float     */    private $factor;    public function __construct(float $factor)    {        $this->factor = $factor;    }}$foo = new Foo(1.23);$boo = 2;$result = $foo*$boo;//wanted output 2.46echo $result;该代码生成 PHP 通知(PHP 7.3)Foo 类的对象无法转换为数字在PHP的魔术方法列表没有任何__toNumber()方法,但也许有一个解决方法是什么?显然,除了使用 getter 之外,例如:getFactor() : float{     return $this->factor;}你有什么主意吗?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

在我完成我的回答之前,已经发布了带有解决方案的评论,但使用__invoke()是您可以获得的最接近的:


<?php


class Foo

{

    /**

     * @var float

     */

    private $factor;


    public function __construct(float $factor)

    {

        $this->factor = $factor;

    }


    public function __invoke()

    {

        return $this->factor;

    }

}


$foo = new Foo(1.23);

$boo = 2;


$result = $foo() * $boo;


//wanted output 2.46

echo $result;


查看完整回答
反对 回复 2021-07-09
?
DIEA

TA贡献1820条经验 获得超2个赞

我想出的另一个解决方法是:


<?php


class Foo

{

    /**

     * @var float

     */

    private $factor;


    public function __construct(float $factor)

    {

        $this->factor = $factor;

    }


    public function __toString()

    {

        return (string) $this->factor;

    }

}


$foo = new Foo(1.23);

$boo = 2;


$result = (string) $foo * $boo;


//wanted output 2.46

echo $result;


echo " ";


//double

echo gettype($result);

使用起来看起来非常不直观,但会产生想要的结果。


查看完整回答
反对 回复 2021-07-09
  • 2 回答
  • 0 关注
  • 272 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信