繁体   English   中英

无法访问私有财产

[英]Cannot access private property

我的以下代码有问题,我正在尝试打印学生的数据,但出现以下错误:

致命错误:未捕获错误:无法访问私有财产秘书:: $学生

如果我将属性设置为公共属性,则它可以正常工作。

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

Student-> name是私有数据成员。 根据定义,这意味着您不能在Student定义之外访问它。 基本上,这就是getName()的目的,因此您可以在定义之外访问它。

您要做的是:

foreach($this->students as $key=>$value){
    echo $value->getName() . " ";
}

这将达到预期的效果。

如果您想了解更多有关访问修饰符的信息,可以在此处阅读有关它们的信息

为此,您需要一个setter函数。 您不能直接访问私有变量。

在班级秘书中,您需要一个函数AddStudent(Student $ students);

该函数如下所示:

public function AddStudent(Student $student) {
    if (!$this->students->contains($student)) {
        $this->students[] = $student;
    }
    return $this;
}

之后,您可以使用函数“ printStudents”打印所有学生。

您不能访问超出其自身范围的类的私有属性。 要实现所需的功能,请考虑采用如下新方法:

public function addStudent(Student $s): Secretary
{
    array_push($this->students, $s);
    return $this;
}

然后,您可以将新学生添加到秘书中。

$s = new Secretary();
$s->addStudent(new Student('Foo'));

$s->printStudents();

您可以观看它的实时演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM