以下代码有问题,我正在尝试打印学生的数据,但出现以下错误:
致命错误:未捕获错误:无法访问私有财产 秘书:: $学生
如果我将属性设置为公共属性,它将正常工作。
class Student {
private $name;
public function __construct($name){
$this->name = $name;
}
public function getName(){
return $this->name;
}
}
class Secretary{
private $students = array();
public function printStudents(){
foreach($this->students as $key=>$value){
echo $value->name . " ";
}
}
}
$secretary = new Secretary();
// Add students.
$student = new student("Student1");
array_push($secretary->students,$student);
$secretary->printStudents();
答案 0 :(得分:1)
Student-> name是私有数据成员。根据定义,这意味着您不能在Student定义之外访问它。这基本上是getName()
的目的,因此您可以在定义之外访问它。
您要执行的操作是:
foreach($this->students as $key=>$value){
echo $value->getName() . " ";
}
这将按预期进行。
如果您想进一步了解访问修饰符,可以here对其进行阅读。
答案 1 :(得分:1)
为此您需要一个setter函数。您不能直接访问私有变量。
在班级秘书中,您需要一个函数AddStudent(Student $ students);
此功能如下:
public function AddStudent(Student $student) {
if (!$this->students->contains($student)) {
$this->students[] = $student;
}
return $this;
}
然后,您可以使用函数'printStudents'打印所有学生。
答案 2 :(得分:0)
您不能访问超出其范围的类的私有属性。要实现所需的功能,请考虑采用如下新方法:
public function addStudent(Student $s): Secretary
{
array_push($this->students, $s);
return $this;
}
然后,您可以将新学生添加到秘书中。
$s = new Secretary();
$s->addStudent(new Student('Foo'));
$s->printStudents();
您可以看到其中live demo正常工作。