我甚至不知道如何問。我在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