Pregunta

Tengo este pequeño fragmento de código, quiero ser capaz de definir cada elemento de la matriz como un nuevo miembro de datos.

class Core_User
{
     protected $data_members = array(
         'id'               =>  '%d',
         'email'            => '"%s"',
         'password'         => '"%s"',
         'title'            => '"%s"',
         'first_name'       => '"%s"',
         'last_name'        => '"%s"',
         'time_added'       =>  '%d' ,
         'time_modified'    =>  '%d' ,
         );

    function __construct($id = 0, $data = NULL)
    {
        foreach($this->data_members as $member){
           //protected new data member
        }

    }
¿Fue útil?

Solución

  

// nuevo miembro de datos protegido

Usted no será capaz de crear una propiedad no pública en tiempo de ejecución. Si protegida es de suma importancia, puede declarar una matriz protegida o clave de objeto y de inserción / valores en que en el constructor

Otros consejos

  1. Utilice siempre $ cuando desee a los miembros acceso del objeto (que debería ser $ this-> data_members en el constructor).
  2. Usted puede intentar definir métodos mágicos __get y __set (no estoy seguro de si pueden ser protegidos sin embargo). :

    protected function __get($name){                  
     if (array_key_exists($name,$this->data_memebers))
     {
         return $this->data_memebers[$name];
     }         
     throw new Exception("key $name doesn't not exist");  
    }  
    protected function __set($name,$value){
     if (array_key_exists($name,$this->data_memebers))
     {
         $this->data_memebers[$name] = $value;
     }
     throw new Exception("key $name doesn't not exist");
    } 
    

Lo que se quiere lograr es posible, sin embargo, no será capaz de hacer la nueva propiedades protected (ya que esto sólo es posible para los miembros predefinidas).

function __construct($id = 0, $data = NULL)
{
    foreach($this->$data_memebers as $name => $value ){
       $this->$name = $value;
    }
}

Tenga en cuenta el uso de la $ antes name en $this->$name:. Esto hace que PHP utiliza el valor actual de la variable $name como propiedad

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