php: bazı durumlarda olsun __ kaçınarak?

2 Cevap php

Ben __set istimal bir sınıf var. Ben sadece bir şey ayarlamak istemiyorum, çünkü ben aslında bir sınıf özelliği koyacaktır önce denetler onaylı değişkenler bir dizi var.

Ancak, yapı, ben __construct yöntemi onaylı listede olmayan bazılarının birkaç sınıf özellikleri, ayarlamak istediğiniz. Yapı olur Yani, ve ben $this->var = $value, ben tabii ki bu değişkeni ayarlamak için izin değilim benim istisna olsun.

Ben bir şekilde bu sorunun üstesinden gelebilirsiniz?

2 Cevap

Sınıf üyelerine bildirin:

class Blah
{
   private $imAllowedToExist;   // no exception thrown because __set() wont be called
}

Sınıf üyelerini ilan en iyi bahistir. Bu işe yaramazsa, sen hata atmak belirler ki ($this->isInConstructor?) Bir anahtar olabilir.

Öte yandan, aynı zamanda __get yöntemi yanı sıra __set yöntemini kullanın ve her ikisi de bir sarılmış kütüphaneye haritasına sahip olabilir:

class Foo
{
    private $library;        
    private $trustedValues;

    public function __construct( array $values )
    {
        $this->trustedValues = array( 'foo', 'bar', 'baz' );
        $this->library = new stdClass();
        foreach( $values as $key=>$value )
        {
            $this->library->$key = $value;
        }
    }

    public function __get( $key )
    {
        return $this->library->$key;
    }

    public function __set( $key, $value )
    {
        if( in_array( $key, $this->trustedValues ) )
        {
            $this->library->$key = $value;
        }
        else
        {
            throw new Exception( "I don't understand $key => $value." );
        }
    }
}