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 に答える