Reputation: 53356
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
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
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
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