@Fifi209, @Magic WWW: Nie, rozpoczynanie nazw jakimiś śmieciami w postaci znaku podkreślenia się nie przyjęło w PHP5+.
@deniol13: Cięzko tutaj jakieś wywody pisać. Pamiętaj tylko o tym by jeden obiekt zajmował się jedną rzeczą. Innymi słowy, czy w Twoim przypadku pracownik może być traktowany jako synonim osoby? Bo to właśnie osoba posiada imię czy nazwisko. Jeżeli takie dane są specyficzne wyłączone dla pracowników i jest mała szansa by kiedykolwiek w przyszłości zaistniała potrzeba utworzenia innych obiektów posiadających cechy osoby wtedy taki model jeszcze może pozostać. Ale jeżeli w przyszłości będziesz chciał dodać przykładowo obiekty pracodawcy czy wędkarza, które również posiadają takie cechy jak imię i nazwisko to co? Pomyśl nad wydzieleniem tych danych do osobnego obiektu.
Podobnie jest z umiejętnościami pracownika. To już jest klasyczna relacja jeden-do-wielu i raczej nie powinna być zapisana na sztywno w kodzie. Jest całkiem prawdopodobne, że w przyszłości będziesz chciał dodać np. umiejętność negocjowania. Co wtedy? Przepisywanie kodu? Swoją drogą umiejętności również powinny być przypisane do osoby, nie do pracownika. W sumie taki obiekt pracownika to poza specyficznymi dla pracownika rzeczami (typu wynagrodzenie) będzie składał się z masy metod-proxy do innych obiektów (by jego interfejs był jakiś "znośny")
class Person {
private $firstName;
private $lastName;
private $skills;
}
class Skill {
private $name;
}
class Employee {
private $person;
public function getFullName() {
return $this->person->getFirstName() . ' ' . $this->person->getLastName();
}
}
// ...
$codingSkill = new Skill('coding');
$designSkill = new Skill('design');
$person= new Person();
$person->setFirstName('Joe');
$person->setLastName('Doe');
$person->setSkills(array($codingSkill, $designSkill));
$employee = new Employee($person);
echo $employee->getFullName();