<?php
abstract
class
Weapon{
abstract
public
function
descriptions();
abstract
public
function
cost();
}
class
Glave
extends
Weapon{
public
function
descriptions(){
return
'Glave';
}
public
function
cost(){
return
"100"
;
}
}
class
Knife
extends
Weapon{
public
function
descriptions(){
return
__CLASS__
;
}
public
function
cost(){
return
"80"
;
}
}
class
Axe
extends
Weapon{
public
function
descriptions(){
return
__CLASS__
;
}
public
function
cost(){
return
"200"
;
}
}
class
Property
extends
Weapon{
protected
$_weapon
= null;
protected
$_price
= 0;
protected
$_descriptions
= '';
public
function
__construct(Weapon
$weapon
){
$this
->_weapon =
$weapon
;
}
public
function
cost(){
return
$this
->_weapon->cost() +
$this
->_price;
}
public
function
descriptions(){
return
$this
->_weapon->descriptions().
$this
->_descriptions;
}
}
class
Strength
extends
Property{
protected
$_price
= 30;
protected
$_descriptions
= '+ Strength';
}
class
Agility
extends
Property{
protected
$_price
= 50;
protected
$_descriptions
= '+ Agility';
}
class
Intellect
extends
Property{
protected
$_price
= 20;
protected
$_descriptions
= '+ Intellect';
}
$weapon
=
new
Agility(
new
Strength(
new
Strength(
new
Glave())));
echo
$weapon
->cost();
echo
$weapon
->descriptions();