我甚至不知道如何问。我在C#中一直这样做,但在我的生活中,我无法在PHP中找到任何体面的示例。你能帮我吗?类中的类对象与PHP OOP
我想要做的是例如。假设我有一个叫公司的班级,他有很多员工。
我希望能够将所有员工存储在公司类中,然后当我迭代公司对象时,我需要能够遍历分配给该公司的所有员工,并且我正在摸索一段时间试图找到一个直接的例子。
我可以填充它,但为了我的生活我无法循环通过员工。我知道我做错了什么,但无法弄清楚。这是我的例子。
员工
这可能是完全错误的,我才知道作为获取数据退了出去。
class Employee
{
private $first;
private $last;
public function __construct($first = null, $last = null)
{
if(isset ($first))
$this->first = $first;
if(isset ($last))
$this->last = $last;
}
public function getEmployee()
{
return Employee($this->first, $this->last);
}
public function getFirst()
{
return $this->first;
}
public function getLast()
{
return $this->first;
}
}
公司拥有一批员工。
在C#中我会使用类似的通用
public List<Employee> Employees {get;set;}
然后在构造函数中我会做类似
Employees = new List<Employee>();
然后,我可以做类似
foreach(var x in Customer.Employees)
x.first;
那是我有点想做的事情。
class Company
{
private $companyName;
private $employees;
public function __construct($nameOfCompany)
{
$this->companyName = $nameOfCompany;
}
public function setEmployee(Employee $employee)
{
$this->employees[] = $employee;
}
public function getCompanyName()
{
return $this->companyName;
}
public function setCompanyName($nameOfCompany)
{
$this->companyName = $nameOfCompany;
}
public function getEmployees()
{
return $this->employees;
}
}
创建并填充
$c = new Company("Test");
$c->setEmployee(new Employee('A','B'));
$c->setEmployee(new Employee('C','D'));
$c->setEmployee(new Employee('E','F'));
直到此时一切都很好。
要获得公司的名称没有问题。
echo $c->getCompanyName();
echo "<PRE>";
print_r($c);
echo "</PRE>";
但是,我如何循环通过员工?
我希望能够像做投公司的员工在一个循环中的单个雇员,然后像做
foreach(customers employees)
echo Employee->getFirst, etc...
是否有人可以提供一些指导?
感谢
不要用'__get'给他提出想法 - 至少不是没有告诉他关于固有问题。 – Artefacto 2010-08-02 00:20:45
非常感谢您的回复。它让我朝着正确的方向前进。 问题,是否因为__get允许你这样做, foreach($ company-> employees as $ e)? 我想说是的,但我只是想确保我理解它。还有什么是陷阱? Artefacto提到了固有的问题? 再次感谢您 – nitefrog 2010-08-02 02:54:57
@nite __get比直接访问对象属性慢得多(在下一版本的PHP中更是如此)。在一个沉重的面向对象的应用程序中,它可能会有所作为。 – Artefacto 2010-08-02 07:03:11