abstract class Employee { protected $name; private static $types = array('minion', 'cluedup', 'wellconnected'); static function recruit($name) { $num = rand(1, count(self::$types)) - 1; $class = self::$types[$num]; return new $class($name); } function __construct($name) { $this->name = $name; } abstract function fire(); } // new Employee class... class WellConnected extends Employee { function fire() { print "{$this->name}: I'll call my dad\n"; } } $boss = new NastyBoss(); $boss->addEmployee(Employee::recruit("harry")); $boss->addEmployee(Employee::recruit("bob")); $boss->addEmployee(Employee::recruit("mary")); $boss->projectFails(); $boss->projectFails(); $boss->projectFails();
$this->name = $name; } abstract function fire(); } class Minion extends Employee { function fire() { print "{$this->name}: убери со стола \n"; } } class NastyBoss { private $employees = []; function addEmployee($employees) { $this->employees[] = new Minion($employees); } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } $boss = new NastyBoss(); $boss->addEmployee("Игорь"); $boss->addEmployee("Владимир"); $boss->addEmployee("Мария"); $boss->projectFails();
} class ClurUp extends Employee { function fire() { print "{$this->name}: I'll call my lawyer\n"; } } class NastyBoss { private $employees = array(); function addEmployee(Employee $employee) { $this->employees[] = $employee; } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } $boss = new NastyBoss(); $boss->addEmployee(new Minion("barry")); $boss->addEmployee(new ClurUp("bob")); $boss->addEmployee(new Minion("mary")); $boss->projectFails(); $boss->projectFails(); $boss->projectFails(); $boss->projectFails();
} } class WellConnected extends Employee { function fire() { print "{$this->name}: blablabla\n"; } } class NastyBoss { private $employees = array(); function addEmployee(Employee $employee) { $this->employees[] = $employee; } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } $employee = new NastyBoss(); $employee->addEmployee(Employee::recruit('Slava')); $employee->addEmployee(Employee::recruit('Lidia')); $employee->addEmployee(Employee::recruit('Nestor')); $employee->projectFails(); $employee->projectFails(); $employee->projectFails();
<?php $boss = new NastyBoss(); $boss->addEmployee(Employee::recruit("Bob")); $boss->addEmployee(Employee::recruit("Steve")); $boss->addEmployee(Employee::recruit("Lisa")); $boss->projectFails(); $boss->projectFails(); $boss->projectFails();
abstract function fire(); } class Minion extends Employee { function fire() { print "{$this->name}: I'll clear my desk\n"; } } class NastyBoss { private $employees = array(); function addEmployee($employeeName) { $this->employees[] = new Minion($employeeName); } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } $boss = new NastyBoss(); $boss->addEmployee("harry"); $boss->addEmployee("bob"); $boss->addEmployee("mary"); $boss->projectFails(); // output: // mary: I'll clear my desk
function fire() { print "{$this->name}: убери со стола\n"; } } class NastyBoss { private $employees = []; function addEmployee(Employee $employee) { $this->employees[] = $employee; } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } class ClueUp extends Employee { function fire() { print "{$this->name}: вызови адвоката\n"; } } $boss = new NastyBoss(); $boss->addEmployee(Employee::recruit("Игорь")); $boss->addEmployee(Employee::recruit("Владимир")); $boss->addEmployee(Employee::recruit("Мария"));
function addEmployee(Employee $employee) { $this->employees[] = $employee; } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } class ClueUp extends Employee { function fire() { print "{$this->name}: вызови адвоката\n"; } } $boss = new NastyBoss(); $boss->addEmployee("Игорь"); $boss->addEmployee("Владимир"); $boss->addEmployee("Мария"); $boss->projectFails(); $boss = new NastyBoss(); $boss->addEmployee(new Minion("Игорь")); $boss->addEmployee(new ClueUp("Владимир")); $boss->addEmployee(new Minion("Мария")); $boss->projectFails(); $boss->projectFails(); $boss->projectFails();
} } class CluedUp extends Employee { function fire() { echo $this->name . ': вызови адвоката'; } } class NastyBoss { private $employees = []; function addEmployee(Employee $employee) { $this->employees[] = $employee; } function projectFails() { if (count($this->employees) > 0) { $emp = array_pop($this->employees); $emp->fire(); } } } $boss = new NastyBoss(); $boss->addEmployee(Employee::recruit('Игорь')); $boss->addEmployee(Employee::recruit('Владимир')); $boss->addEmployee(Employee::recruit('Мария')); var_dump($boss); $boss->projectFails(); var_dump($boss);