I have a class in fileA.php like so:
class Test {
private foo;
public function array() {
$this->$foo = array ( 'a', 'b', 'c', 'd', 'e' );
return $foo;
}
}
I want to change the array returned by the method to:
array('x', 'y', 'z')
Not sure if this the right way to about it, but this is what I tried in fileB.php:
require_once('fileA.php');
class TestB extends Test {
public function array() {
$this->$foo = array('x', 'y', 'z');
return $foo;
}
}
Is it possible to make this modification? Any help will be greatly appreciated.
Thanks
$foo is a private property so you cannot access it from any child classes. Only protected and public properties can be accessed from child classes.
Since array() is a public method, you can overwrite that method and return a different array without modifying or accessing $foo
.
class TestB extends Test {
public function array() {
return array('x', 'y', 'z');
}
}
But this would not affect foo
for any other methods that use it.
Keep in mind, you must access class properties from within methods as $this->name
(ex. $this->foo
), not $foo or $this->$foo.
Rather than having a new class, you can change the class to have an initial value for $foo
and then a public method which can change this value...
class Test {
// Value with starting value, or could be set in the constructor
private $foo = array ( 'a', 'b', 'c', 'd', 'e' );
public function array() {
return $this->foo;
}
public function setFoo ( $newArray ) {
$this->foo = $newArray;
}
}
$a = new Test();
print_r($a->array());
$a->setFoo(array('x', 'y', 'z'));
print_r($a->array());
gives...
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
Array
(
[0] => x
[1] => y
[2] => z
)