有没有办法让PHP对象像本机类型一样“行动”?

时间:2011-03-10 10:40:16

标签: php oop

  

可能重复:
  Implicit Type Conversion for PHP Classes?

假设我想定义自己的原生类型,或者只想将Object桥接到本机类型。

例如,参加这个课程:

class Integer {

 private $num;
  function __construct($number){
   $this->num = $number;
  }

}

有没有办法可以使用这个类:

$n = new Integer(14);
echo $n+3; //output 17

谢谢!

3 个答案:

答案 0 :(得分:3)

我可以为5.3建议另一个解决方案。您可以实现__invoke()方法并按如下方式编写:

$n = new Integer(14);
echo $n()+3; //output 17

完整代码:

<?php
class Integer {

 private $num;
  function __construct($number){
   $this->num = $number;
  }
  public function __invoke() {
    return $this->num;
  }
}

$n = new Integer(14);
echo $n() + 3; //output 17

答案 1 :(得分:0)

PHP不支持对自定义类型或类的隐式转换,因此这样的构造不起作用。我认为最简单(尽管很无聊)的方法是在toIntegertoStringtoBoolean等对象中实现自己的方法,并且当你想要执行基本操作时总是调用它们

像这样:

$n = new Integer(14);
echo $n->toInteger() + 3; //output 17

答案 2 :(得分:0)

为什么不:

class Integer{
    private $Integer;
    function __construct($n){
        $this->Integer = (int)$n;    
    }
    public function __toString()
    {
        return strval($this->Integer);
    }
}

$n = new Integer(14);
$a = strval($n);
echo $a+3; //Ouptups 17