【问题标题】:Why is array not added to PHP class' property?为什么数组没有添加到 PHP 类的属性中?
【发布时间】:2026-01-17 10:05:02
【问题描述】:

我是 OOP PHP 新手,一直在关注 Laracasts OOP Bootcamp。我已经达到了教程的某个部分,我遇到了麻烦。我有以下文件(忽略未遵循的约定,因为它是学习阶段):

<?php
class Person
{
    protected $name;

    public function __construct($name)
    {
        $this->name = $name;
    }
}

class Staff
{
    protected $members = [];

    public function __constructor($members = [])
    {
        $this->members = $members;
    }

    public function add(Person $person)
    {
        $this->members[] = $person;
    }

    public function members()
    {
        return $this->members;
    }
}

class Business
{
    protected $staff;

    public function __construct(Staff $staff)
    {
        $this->staff = $staff;
    }

    public function hire(Person $person)
    {
        $this->staff->add($person);
    }

    public function getStaffMembers()
    {
        return $this->staff->members();
    }
}

$jeffrey = new Person('Jeffrey Way');

$staff = new Staff([$jeffrey]);

$laracasts = new Business($staff);
$laracasts->hire(new Person('Jane Doe'));

var_dump($laracasts->getStaffMembers());

不幸的是,var_dump 只给了我一名工作人员:

array(1) {
  [0]=>
  object(Person)#4 (1) {
    ["name":protected]=>
    string(8) "Jane Doe"
  }
}

我尝试将 [] 添加到 Staff 类下的 $this-&gt;members = $members; 行,但它仍然给我相同的输出。我还仔细检查了文件,我应该期待两个成员而不是一个。

谁能告诉我哪里出错了?

感谢您的宝贵时间。

【问题讨论】:

    标签: php arrays class


    【解决方案1】:

    除了一行之外,您的代码是正确的 - 类 Staff 的构造函数定义不正确。替换

    public function __constructor($members = [])
    

    public function __construct($members = [])
    

    由于这个错误,$staff = new Staff([$jeffrey]); 行对内部$members 数组的初始化没有影响。

    【讨论】: