2

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?

3 Answers 3

8

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
}
?>
Sign up to request clarification or add additional context in comments.

Comments

1

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.

Comments

1

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

1 Comment

$this->options = array_merge(...)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.