1
class AAA

{

    function getRealValue($var)
    {
        $this->var = $var;
        return $this;
    }

    function asString()
    {
        return (string) $this->var;
    }

}

$a = new AAA;
$a->getRealValue(30); 
$a->getRealValue(30)->asString(); 

所以当我调用 $a->getRealValue(30) 它应该返回 30,

但是当我调用 $a->getRealValue(30)->asString() 它应该返回'30'作为字符串'。

谢谢

4

2 回答 2

6

所以当我调用 $a->getRealValue(30) 它应该返回 30,但是当我调用 $a->getRealValue(30)->asString() 它应该返回 '30' 作为字符串'。

这是不可能的()。当getRealValue返回一个标量值时,你不能调用它的方法。

除此之外,你的课对我来说毫无意义。您的方法被调用getRealValue,但它接受一个参数并设置值。所以应该叫它setRealValue。撇开方法链不谈,您是否正在寻找一个 ValueObject?

class Numeric
{
    private $value;

    public function __construct($numericValue)
    {
        if (false === is_numeric($numericValue)) {
            throw new InvalidArgumentException('Value must be numeric');
        }
        $this->value = $numericValue;
    }

    public function getValue()
    {
        return $this->value;
    }

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

$fortyTwo = new Numeric(42);
$integer = $fortyTwo->getValue(); // 42
echo $fortyTwo; // "42"
于 2013-03-06T08:01:57.333 回答
3

它不是真的, $a->getRealValue(30) 将返回对象 $a 而不是值。但 asString 将以字符串格式返回值。

通常当你想得到这样的东西时,你会这样做:

$a->getRealValue(30)->get();
//Or
$a->getRealValue(30)->getAsString();
于 2013-03-06T08:02:04.303 回答