Converting a PHP array to class variables

arrays, class, object, php, variables

Solution

This simple code should work:

<?php

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

?>

Example usage

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

Alternatively, this might be a better approach

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

?>

Usage is the same

// 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

Problem

Simple question, how do I convert an associative array to variables in a class? I know there is casting to do an `(object) $myarray` or whatever it is, but that will create a new stdClass and doesn't help me much. Are there any easy one or two line methods to make each `$key => $value` pair in my array into a `$key = $value` variable for my class? I don't find it very logical to use a foreach loop for this, I'd be better off just converting it to a stdClass and storing that in a variable, wouldn't I? ``` 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 } } ```

Original source

Related problems