<?
class Name {
private $firstName;
private $lastName;
function __construct($lastName_in, $firstName_in) {
$this->firstName = $firstName_in;
$this->lastName = $lastName_in;
}
function getFirstName() {
return $this->firstName;
}
function getLastName() {
return $this->lastName;
}
function getFirstNameAndLastName() {
return $this->getLastName() . " by " . $this->getFirstName();
}
}
class LastNameDecorator {
protected $name;
public $lastName;
public function __construct(Name $name_in) {
$this->name = $name_in;
$this->resetLastName();
}
function resetLastName() {
$this->lastName = $this->name->getLastName();
}
function showLastName() {
return $this->lastName;
}
}
class LastNameExclaimDecorator extends LastNameDecorator {
private $btd;
public function __construct(LastNameDecorator $btd_in) {
$this->btd = $btd_in;
}
function exclaimLastName() {
$this->btd->lastName = "!" . $this->btd->lastName . "!";
}
}
class LastNameStarDecorator extends LastNameDecorator {
private $btd;
public function __construct(LastNameDecorator $btd_in) {
$this->btd = $btd_in;
}
function starLastName() {
$this->btd->lastName = Str_replace(" ","*",$this->btd->lastName);
}
}
$patternName = new Name("A","B");
$decorator = new LastNameDecorator($patternName);
$starDecorator = new LastNameStarDecorator($decorator);
$exclaimDecorator = new LastNameExclaimDecorator($decorator);
echo $decorator->showLastName();
$exclaimDecorator->exclaimLastName();
$exclaimDecorator->exclaimLastName();
echo $decorator->showLastName();
$starDecorator->starLastName();
echo $decorator->showLastName();
echo $decorator->resetLastName();
echo $decorator->showLastName();
?>