<?php
abstract class Book
{
// public $format = ['HARD', 'POCKET'];
protected $_price;
public function __construct($price)
{
$this->_price = setPrice($price);
}
public function setPrice($price)
{
if ($price > 0) {
$this->_price= $price;
} else {
throw new Exception("Price cannot be less than 0");
}
}
public function getPrice()
{
return $this->_price;
}
}
class Hard extends Book
{
public function __construct($price){
$this->setPrice($price);
}
public function setPrice($price){
$this->_price= $price+ $price * 1/4;
}
}
class Pocket extends Book
{
public function __construct($price){
$this->setPrice($price);
}
}
class BookFactory
{
public static function add($format, $price){
return new $format($price);
} else {
throw new Exception('Format not supported.');
}
}
}
$book1 = BookFactory::add('HARD',600);
echo "The " . get_class($book1) . " is \${$book1->getPrice()}"; echo "\r\n";
$book2 = BookFactory::add('pocket',600);
echo "The " . get_class($book2) . " is \${$book2->getPrice()}";
PD9waHAKCmFic3RyYWN0IGNsYXNzIEJvb2sKewoJLy8gcHVibGljICRmb3JtYXQgPSBbJ0hBUkQnLCAnUE9DS0VUJ107Cglwcm90ZWN0ZWQgJF9wcmljZTsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHByaWNlKQoJewoJCSR0aGlzLT5fcHJpY2UgPSBzZXRQcmljZSgkcHJpY2UpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRQcmljZSgkcHJpY2UpCgl7ICAgCgkJaWYgKCRwcmljZSA+IDApICB7IAoJCSAJJHRoaXMtPl9wcmljZT0gJHByaWNlOwoJCX0gZWxzZSB7IAoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJQcmljZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDAiKTsgICAgICAgIAoJCX0gIAoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRQcmljZSgpCgl7ICAgCgkJcmV0dXJuICR0aGlzLT5fcHJpY2U7ICAKCX0KCgp9CgpjbGFzcyBIYXJkIGV4dGVuZHMgQm9vawp7CgkKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcHJpY2UpewoJCSR0aGlzLT5zZXRQcmljZSgkcHJpY2UpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0UHJpY2UoJHByaWNlKXsKCQkkdGhpcy0+X3ByaWNlPSAkcHJpY2UrICRwcmljZSAqIDEvNDsKCX0KfQoKY2xhc3MgUG9ja2V0IGV4dGVuZHMgQm9vawp7CglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHByaWNlKXsKCQkkdGhpcy0+c2V0UHJpY2UoJHByaWNlKTsKCX0KCQp9CmNsYXNzIEJvb2tGYWN0b3J5CnsKCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGQoJGZvcm1hdCwgJHByaWNlKXsKCQkkZm9ybWF0ID0gdWN3b3JkcygkZm9ybWF0KTsKCQlpZihjbGFzc19leGlzdHMoJGZvcm1hdCkpIHsKICAgICAgICAgICByZXR1cm4gbmV3ICRmb3JtYXQoJHByaWNlKTsKCQl9IGVsc2UgewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdGb3JtYXQgbm90IHN1cHBvcnRlZC4nKTsKCQl9Cgl9CgkKfQoKJGJvb2sxID0gQm9va0ZhY3Rvcnk6OmFkZCgnSEFSRCcsNjAwKTsKZWNobyAiVGhlICIgLiBnZXRfY2xhc3MoJGJvb2sxKSAuICIgaXMgXCR7JGJvb2sxLT5nZXRQcmljZSgpfSI7CmVjaG8gIlxyXG4iOyAKJGJvb2syID0gQm9va0ZhY3Rvcnk6OmFkZCgncG9ja2V0Jyw2MDApOwplY2hvICJUaGUgIiAuIGdldF9jbGFzcygkYm9vazIpIC4gIiBpcyBcJHskYm9vazItPmdldFByaWNlKCl9Ijs=