Yapıcısı içinde veri üyeleri tanımlamak

3 Cevap php

Ben yeni bir veri üyesi olarak her dizi elemanı tanımlamak mümkün olmak istiyorum, bu kod küçük parçacığını var.

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
        }

    }

3 Cevap

/ / Yeni veri aydan korumalı

Sen zamanında olmayan bir ortak özelliği oluşturmak mümkün olmayacaktır. Her şeyden önemlidir korumalı ise, korumalı bir dizi veya nesne bildirmek ve yapıcı bunun içine anahtar / değer ekleyebilirsiniz

  1. Eğer nesnenin üyeleri erişmek istediğinizde her zaman $ kullanabilirsiniz (o kurucusuna bu-> data_members $ olmalıdır).
  2. Alacağınız __ sihirli yöntemleri tanımlayan deneyebilirsiniz & edebilirsiniz __set (onlar olsa korunabilir eğer ben emin değilim). :

    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");
    } 
    

Ne elde etmek istediğinizi mümkündür, ancak (bu, önceden tanımlanmış üyeler için mümkün olduğu gibi) yeni özellikler protected yapmak mümkün olmayacaktır.

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

Bu PHP özelliği olarak $name değişkenin geçerli değeri kullanmak yapar: name $this->$name önce $ kullanımına dikkat.