Методы цепочки PHP

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" как строку ".

Спасибо

2 ответа

Поэтому, когда я вызываю $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"

Это не правда, $a->getRealValue(30) вернет объект $ a, а не значение. Но asString вернет значение в строковом формате.

Обычно, когда вы хотите получить что-то подобное, вы делаете:

$a->getRealValue(30)->get();
//Or
$a->getRealValue(30)->getAsString();
Другие вопросы по тегам