fork download
  1. <?php
  2.  
  3. class Container {
  4. public $liquid;
  5.  
  6. function __construct($liquid) {
  7. $this->liquid = $liquid;
  8. }
  9.  
  10. function look_inside() {
  11. return "{$this->liquid} in container";
  12. }
  13.  
  14. static function create_with($cls, $liquid) {
  15. return new $cls($liquid);
  16. }
  17. }
  18.  
  19. class Bottle extends Container {
  20. function look_inside() {
  21. return "bottle full of {$this->liquid}";
  22. }
  23. }
  24.  
  25. class Glass extends Container {
  26. function look_inside() {
  27. return "A glass of {$this->liquid}";
  28. }
  29. }
  30.  
  31. foreach(['Glass', 'Bottle'] as $c) {
  32. echo Container::create_with($c, 'beer')->look_inside() . PHP_EOL;
  33. }
  34.  
Success #stdin #stdout 0.02s 24616KB
stdin
Standard input is empty
stdout
A glass of beer
bottle full of beer