Вы не можете установить динамические значения в свойствах класса, как это; они должны быть постоянными значениями. Вы должны сделать такие назначения в конструкторе
// NO
private $person_info = $this->getName . ' ' . $this->getGender . ' and ' . $this->getAge() . '.';
// YES
public function __construct() {
$this->person_info = $this->getName . ' ' . $this->getGender . ' and ' . $this->getAge() . '.';
}
Но то, что вы на самом деле означает это
// you're calling get methods, not properties
// make sure to use $this->getName(), not $this->getName
public function __construct() {
$this->person_info = $this->getName() . ' ' . $this->getGender() . ' and ' . $this->getAge() . '.';
}
Но на самом деле весь код плохо
// This makes no sense to have as a constant property in a class
private $person = array(
'name' => 'Sarah',
'gender' => 'female',
'age' => 21
);
Этот класс делает намного больше смысл для ваших целей
class Person {
// container for your info object
private $info = [];
// make info a parameter for your constructor
public function __construct(array $info = []) {
$this->info = $info;
}
// use PHP magic method __get to fetch values from info array
public function __get(string $attr) {
return array_key_exists($attr, $this->info)
? $this->info[$attr]
: null;
}
// use PHP magic method __set to set values in the info array
public function __set(string $attr, $value) {
$this->info[$attr] = $value;
}
// single method to fetch the entire info object
public function getInfo() {
return $this->info;
}
}
Простой. Давайте посмотрим, как это работает сейчас
$p = new Person([
'name' => 'Sarah',
'gender' => 'female',
'age' => 21
]);
echo $p->name, PHP_EOL;
// Sarah
echo $p->gender, PHP_EOL;
// female
echo $p->age, PHP_EOL;
// 21
echo json_encode($p->getInfo()), PHP_EOL;
// {"name":"Sarah","gender":"female","age":21}
Поскольку $info
массив является параметром теперь, вы можете легко создавать объекты Person с другими данными
$q = new Person([
'name' => 'Joey',
'gender' => 'male',
'age' => 15
]);
echo $q->name, PHP_EOL;
// Joey
echo $q->gender, PHP_EOL;
// male
echo $q->age, PHP_EOL;
// 15
echo json_encode($q->getInfo()), PHP_EOL;
// {"name":"Joey","gender":"male","age":15}
Поскольку http://php.net/manual/en/ language.oop5.properties.php _This декларация может включать в себя инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения, чтобы быть Оцените._ ** Постройте его в конструкторе. ** – AbraCadaver