Присвоить значения массива, значениям свойств объекта

Nezhnayka

Новичок
Добрый день.
Имею такую конструкцию
Код:
class MyPost{

    protected $labels;
    protected $public;
    protected $has_archive;
    protected $taxonomies;
    protected $rewrite;
    protected $menu_icon;
    protected $supports;
    protected $name;

    public function __construct( $atts ){
        extract( array_merge( array(
            'labels' => array(),
            'public' => false,
            'has_archive' => true,
            'taxonomies' => false,
            'rewrite' => true,
            'menu_icon' => null,
            'supports' => array( 'title', 'editor' ),
            'name' => ''
        ), $atts ) );

        $this->labels = $labels;
        $this->public = $public;
        $this->has_archive = $has_archive;
        $this->taxonomies = $taxonomies;
        $this->rewrite = $rewrite;
        $this->menu_icon = $menu_icon;
        $this->supports = $supports;
        $this->name = $name;

...........................
..........................
.........................   
}
В конструкторе получаю массив параметров, надо их присвоить свойствам объекта. Для этого делаю вот такую громоздкую простыню, сначала подменяю дефолтные значения пришедшими значениями параметров, далее извлекаю их в переменные, далее свойствам объекта присваиваю значения этих переменных. Уверен, что можно сделать это более грамотно, подскажите пожалуйста, как?
 

WMix

герр M:)ller
Партнер клуба
PHP:
class MyPost{
    protected $labels =array();
    ...
    public function __construct( $atts ){
        foreach($atts as $key => $val){
            if(property_exists($this, $key)){
                $this->$key=$val;
            }
        }
    }
    ...
}
 

fixxxer

К.О.
Партнер клуба
наоборот - интереснее!
PHP:
    public function export() {
        $clone = clone($this);
        settype($clone, 'array');
        return unserialize(preg_replace_callback('/s:(\d+):\"(\x00.+?\x00)([^\"]+)\"/', function($matches) {
            return 's:' . ($matches[1] - strlen($matches[2])) . ':"' . $matches[3] . '"';
        }, serialize($clone)));
    }
извините :D
 
Сверху