Pregunta

He tenido una buena lectura de los especificaciones de PHP en la sobrecarga , y la mayoría de los ejemplos parecen estar destinados a permitir simplemente definir los campos personalizados (similares a stdClass).

Pero ¿qué pasa con los campos privados previstos en mi clase? ¿Cómo deben ser recuperados éstos / asignado? Que podía hacer un interruptor de posibles valores y actuar sobre ciertos valores:

class A
{
    private $name;
    private $age;

    public function __get( $var )
    {
        switch ( $var )
        {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age+10; // just to do something different ;)
                break;
            default:
                break;
        }
    }
}

Es este el mejor método, o hay otra generalmente aceptado las mejores prácticas? (No sé si es posible variables de clase bucle dentro de una clase, pero sin tener en cuenta que no es apropiado en la mayoría de situaciones, ya que no quiere devolver todo.)

¿Fue útil?

Solución

Esto efectivamente hacerlos públicos, y por lo general esto se gana nada sobre el simple uso de bienes de dominio público (pero que pagar penalización en el rendimiento y tener que escribir más código, errores de riesgo).

El uso que sólo si se ha código que utiliza la propiedad pública existente y que necesita de repente captador / definidor de ella (como su ejemplo, con age).

Si es necesario ejecutar código cuando propiedad es de lectura / escrita (por ejemplo que sea de sólo lectura o con pereza buscar a partir de la base de datos), entonces debería usar getters / setters normales (getAge() / setAge()).

Otros consejos

Me hacen un amplio uso de __get() y __set() y tengo mis propiedades declaradas public. Yo quería lo mejor de ambos mundos, por lo que mi IDE podría enumerar las propiedades públicas para mí al escribir el nombre de una instancia de clase. ¿Cómo llegué a los métodos PHP interceptores para trabajar, a pesar de que las propiedades son públicos y visibles fuera de la clase?

unset () las propiedades quieren __get() y __set() a ser utilizados en el __construct() clase

Calculando a cabo este método tomó un par de noches de frustración: -).

No veo muchas personas que los utilizan, pero aquí es lo que pienso.

Para recuperar variables privadas, es probable que quieren dar una lista de las variables definidas que son capaces de ser visitada por el exterior. A continuación, comprobar para ver si la variable en cuestión está en la matriz. Si es así, permitir que sea cambiado / conseguido. Si no es así, ya sea error o devolver null.

Sinceramente, las implementaciones de esto son realmente de caso por caso. Si usted tenía una clase de usuario que almacena toda la información en una sola matriz, usted podría tener $ usuario-> nombre sea sacado de $ usuario-> Cuenta [ 'nombre'], o algo por el estilo.

Además, de una manera más caso por caso, se podría hacer alguna modificación antes de darles valores, como hash de una contraseña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top