<?php
abstract class Render
{
abstract public function main();
public function __construct()
{
}
final public function render()
{
if (!$this->canRender()) return null;
return $this->main();
}
final public function canRender()
{
// Logic here
return true;
}
}
class AdminPanel extends Render
{
public function main()
{
return "Admin Panel";
}
}
$panel = new AdminPanel();
echo $panel->render();
PD9waHAKCmFic3RyYWN0IGNsYXNzIFJlbmRlcgp7CgogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIG1haW4oKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewoKICAgIH0KCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jYW5SZW5kZXIoKSkgcmV0dXJuIG51bGw7CgogICAgICAgIHJldHVybiAkdGhpcy0+bWFpbigpOwogICAgfQoKICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjYW5SZW5kZXIoKQogICAgewogICAgICAgIC8vIExvZ2ljIGhlcmUKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKY2xhc3MgQWRtaW5QYW5lbCBleHRlbmRzIFJlbmRlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbWFpbigpCiAgICB7CiAgICAgICAgcmV0dXJuICJBZG1pbiBQYW5lbCI7CiAgICB9Cn0KCiRwYW5lbCA9IG5ldyBBZG1pblBhbmVsKCk7CgplY2hvICRwYW5lbC0+cmVuZGVyKCk7