Definir miembros de datos dentro del constructor
-
02-10-2019 - |
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
}
}
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
- Utilice siempre $ cuando desee a los miembros acceso del objeto (que debería ser $ this-> data_members en el constructor).
-
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