Я даже не уверен, как спросить. Я делаю это все время на 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
Большое спасибо за этот ответ. Это меня в правильном направлении. Вопрос: это из-за __get, который позволяет вам это делать, foreach ($ company-> employees as $ e)? Я хочу сказать «да», но я просто хочу убедиться, что я это понимаю. И что же такое зачистки? Artefacto упомянул неотъемлемые проблемы? Еще раз спасибо – nitefrog
@nite __get намного медленнее, чем прямой доступ к свойству объекта (и, тем более, это будет в следующей версии PHP). В тяжелом объектно-ориентированном приложении это, вероятно, будет иметь значение. – Artefacto