Преобразование PHP выстраивает к переменным класса

Простой вопрос, как я преобразовываю ассоциативный массив в переменные в классе? Я знаю, там бросает, чтобы сделать (object) $myarray или независимо от того, что это, но это создаст новый stdClass и не помогает мне очень. Есть ли любой легкий один или два метода строки для создания каждого $key => $value пара в моем массиве в a $key = $value переменная для моего класса? Я не нахожу очень логичным использовать цикл foreach для этого, я был бы более обеспечен просто преобразование его к stdClass и хранению это в переменной, не так ли?

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
    }
}
28
задан animuson 26 April 2010 в 17:24
поделиться

1 ответ

Этот простой код должен работать:

<?php

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

?>

Пример использования

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

В качестве альтернативы, это может быть лучший подход

<?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
      ;
    }
  }

?>

Использование такое же

// 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
67
ответ дан 28 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: