Преобразовать экземпляр класса в число с плавающей точкой

Допустим, есть этот класс:

class Number {
private $asString;
private $asFloat;

public function __construct($input) {
$this->asString = $input;
$this->asFloat = $this->parse($input);
}

private function parse($input) {…}

//magic method for $n1 . $n2 operations
public function __toString() { … }

//method for $n1 + $n2 operations
public function __toFloat() { … }
}

К сожалению __toFloat() Волшебный метод не существует. Есть ли способ, кроме: $sum = $n1->toFloat() + $n2->toFloat()без необходимости называть это ->toFloat() Метод все время, когда объект используется в контексте математических операций.

В Javascript есть возможность создавать valueOf() метод, и я ищу способ создать нечто подобное в php. Есть идеи?

2

Решение

Ты можешь использовать invoke как решение для этого случая

<?php
class Number
{
private $asString;
private $asFloat;

public function __construct($input)
{
$this->asString = $input;
$this->asFloat  = $this->parse($input);
}

public function __invoke()
{
return $this->asFloat;
}

private function parse($input)
{
return (float) $input;
}

public function __toString()
{
return $this->asString;
}
}

$n1 = new Number(5);
$n2 = new Number(3);
var_dump($n1() + $n2());
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]