Define class level constant value to control the class behaviour
<?php
abstract class Product {
protected $count;
const FIXED = 1;
const TIMED = 2;
private $costtype = 1;
function __construct( $count, $costtype=1 ) {
$this->count = $count;
$this->costtype = $costtype;
}
function cost() {
switch ( $this->costtype ) {
CASE self::TIMED :
return (5 * $this->count);
break;
CASE self::FIXED :
return 30;
break;
default:
$this->costtype = self::FIXED;
return 30;
}
}
function chargeType() {
switch ( $this->costtype ) {
CASE self::TIMED :
return "hourly rate";
break;
CASE self::FIXED :
return "fixed rate";
break;
default:
$this->costtype = self::FIXED;
return "fixed rate";
}
}
}
class ProductOne extends Product {
}
class ProductTwo extends Product {
}
$lesson = new ProductTwo( 4, Product::TIMED );
$lesson = new ProductTwo( 4, Product::FIXED );
$lesson = new ProductTwo( 4, 33 );
print "lesson charge {$lesson->cost()}. Charge type: {$lesson->chargeType()}\n";
?>
Related examples in the same category