Sınıf değişkenleri PHP dizi dönüştürme

2 Cevap php

Basit bir soru, nasıl değişkenlere bir ilişkisel dizi bir sınıfta dönüştürebilirim? Ben bir (object) $myarray ya da her neyse yapmak için orada döküm olduğunu biliyorum, ama bu yeni bir stdclass yaratacak ve bana çok yardımcı olmuyor. Benim sınıf için bir $key = $value değişken içine benim dizideki her $key => $value çift yapmak için herhangi bir kolay bir veya iki satır yöntemleri var mı? Bunun için bir foreach döngü kullanmak çok mantıklı bulmuyorum, ben sadece, olmaz bir stdClass dönüştürerek ve bir değişken olduğunu saklamak daha iyi olurdu?

class MyClass {
    var $myvar; // I want variables like this, so they can be references as $this->myvar
    function __construct($myarray) {
        // a function to put my array into variables
    }
}

2 Cevap

Bu basit kod çalışması gerekir:

<?php

  class MyClass {
    public function __construct(Array $properties=array()){
      foreach($properties as $key => $value){
        $this->{$key} = $value;
      }
    }
  }

?>

Örnek kullanım

$foo = new MyClass(array("hello" => "world"));
$foo->hello // => "world"

Alternatif olarak, bu daha iyi bir yaklaşım olabilir

<?php

  class MyClass {

    private $_data;

    public function __construct(Array $properties=array()){
      $this->_data = $properties;
    }

    // magic methods!
    public function __set($property, $value){
      return $this->_data[$property] = $value;
    }

    public function __get($property){
      return array_key_exists($property, $this->_data)
        ? $this->_data[$property]
        : null
      ;
    }
  }

?>

Kullanım aynıdır

// init
$foo = new MyClass(array("hello" => "world"));
$foo->hello;          // => "world"

// set: this calls __set()
$foo->invader = "zim";

// get: this calls __get()
$foo->invader;       // => "zim"

// attempt to get a data[key] that isn't set
$foo->invalid;       // => null

Ben bu değiştirmek istiyorum:

public function __get($property){
      return array_key_exists($property, $this->_data)
        ? $this->_data[$property]
        : null
      ;
    }

Buna:

public function __get($property){
      return array_key_exists($property, $this->_data)
        ? $this->_data[$property]
        : $this->$property
      ;
    }