【发布时间】:2018-02-13 07:35:41
【问题描述】:
假设有这个类:
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 中创建类似内容的方法。有什么想法吗?
【问题讨论】:
-
我希望 php 有运算符重载,但似乎从未被提及。
-
您可以使用
__invoke(),当脚本尝试将对象作为函数调用时会调用它。这将使您成为示例:$sum = $n1() + $n2()。这很短。请参阅:php.net/manual/en/language.oop5.magic.php#object.invoke 我不会这样做,因为它可能会让阅读您的代码的人感到困惑。 -
@KIKOSoftware 这看起来是个好主意
-
是的,只需调用
-
像很多 php 代码一样 - hacks 制作巧妙的技巧,但代码就像阅读炼金术一样。用错误的方式说出来,你的数据就会烟消云散。
标签: php type-conversion operator-overloading