<?php

class Container {
    public $liquid;

    function __construct($liquid) {
        $this->liquid = $liquid;
    }

    function look_inside() {
        return "{$this->liquid} in container";
    }

    static function create_with($cls, $liquid) {
        return new $cls($liquid);
    }
}

class Bottle extends Container {
    function look_inside() {
        return "bottle full of {$this->liquid}";
    }
}

class Glass extends Container {
    function look_inside() {
        return "A glass of {$this->liquid}";
    }
}

foreach(['Glass', 'Bottle'] as $c) {
    echo Container::create_with($c, 'beer')->look_inside() . PHP_EOL;
}
