1

Téma: Entity: magické přetěžování settru a gettru

U entil lze volitelně pro property přetížit getter a setter.

/**
 * @property $foo
 */
class Foo extends Orm\Entity
{

    public function getFoo()
    {
        $foo = parent::getFoo();
        // do something with $foo
        return $foo;
    }

    public function setFoo($foo)
    {
        // do something with $foo
        return parent::setFoo($foo);
    }

}

Přetěžuje se stejně jako by v rodiči methoda existovala. Ve skutečnosti ale samodřejmě neexistuje a funguje to magicky pomocí __get/__set.

Bohužel je to zabugované v php 5.3.3 a nefunguje v php <= 5.2.5.

PHP 5.3.3

Bug #52713

Bug lze eliminovat pomocí debug_backtrace() a __callStatic(). To taky dělám ale debug_backtrace je tak pomalé že rozhodně 5.3.3 nedoporučuju používat. Proto to vyhazuje E_USER_WARNING.

PHP < 5.2.5

To jednoduše ještě nepodporuje. Viz #42937

Co s tím?

Kdyby jste byli nuceni používat jednu ze zabugovaných verzí použijte místo magie metody Entity::getValue a Entity::setValue.

public function getFoo()
{
    $foo = $this->getValue('foo');
    // do something with $foo
    return $foo;
}

public function setFoo($foo)
{
    // do something with $foo
    return $this->setValue('foo', $foo);
}