Допустим, есть этот класс:
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. Есть идеи?
Ты можешь использовать 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());
Других решений пока нет …