2011-12-25 18 views
10

¿Hay alguna manera de deshabilitar la adición de properties en una clase desde una instancia de la clase?¿Hay alguna manera de desactivar la adición de propiedades a una clase desde una instancia de la clase?

Lo que quiero decir es lo siguiente:

considerar esta clase:

class a { 
private $v1; 
public $v2; 

function func(){ 
... 
} 
} 

Si hago esto:

$ins = new a; 
$ins->temp = "A variable created from outside the class! C*ap!"; 
var_dump($ins); 

La salida:

 
object(a)#1 (3) { 
    ["v1":"a":private]=> 
    NULL 
    ["v2"]=> 
    NULL 
    ["temp"]=> 
    string(48) "A variable created from outside the class! C*ap!" 
} 

Can this be disabled? `

Respuesta

16

Tal vez se pueden implementar __set() y lanzar una excepción a partir de ahí:

class a { 
    private $v1; 
    public $v2; 

    public function __set($name, $value) { 
     throw new Exception("Cannot add new property \$$name to instance of " . __CLASS__); 
    } 
} 
+0

que miran en __set(). – ThinkingMonkey

+0

Ya, es factible ... Gracias por la información. ¿Hay un método más elegante? como en Estoy anulando el método __set() predeterminado de PHP. Supongo que implicaría un poco de sobrecarga en el cálculo. – ThinkingMonkey

+0

Esa sobrecarga es inevitable, me temo, dada la naturaleza de PHP de permitir que se creen nuevas propiedades simplemente agregándolas a instancias sin sobrecargar. – BoltClock

Cuestiones relacionadas