VirtuosiMedia
VirtuosiMedia

Reputation: 53356

Appending to an array variable in a parent class in PHP

How do I extend my parent's options array for child classes in PHP?

I have something like this:

class ParentClass {

     public $options = array(
          'option1'=>'setting1'
     );

     //The rest of the functions would follow
}

I would like to append to that options array in a child class without erasing any of the parent options. I've tried doing something like this, but haven't quite got it to work yet:

class ChildClass extends ParentClass {

     public $options = parent::options + array(
          'option2'=>'setting2'
     );

     //The rest of the functions would follow
}

What would be the best way to do something like this?

Upvotes: 2

Views: 6518

Answers (3)

Czimi
Czimi

Reputation: 2534

I think it is better practice to initialize this property in the constructor and then you can extend the value in any descendant class:

<?php
class ParentClass {

    public $options;
    public function __construct() {
        $this->options = array(
            'option1'=>'setting1'
        );
    }
    //The rest of the functions would follow
}

class ChildClass extends ParentClass {
    public function __construct() {
        parent::__construct();
        $this->options['option2'] = 'setting2';
    }
    //The rest of the functions would follow
}
?>

Upvotes: 8

Till
Till

Reputation: 22408

Can you array_merge?

Assuming you use the ctr to create the class.

E.g.

public function __construct(array $foo)
{
  $this->options = array_merge(parent::$options, $foo);
}

Upvotes: 1

Andy Lester
Andy Lester

Reputation: 93636

PHP or no, you should have an accessor to do it, so you can call $self->append_elements( 'foo' => 'bar' ); and not worry about the internal implementation.

Upvotes: 1

Related Questions