2018-01-04 21:01:55 +01:00
|
|
|
<?php
|
|
|
|
namespace Misuzu;
|
|
|
|
|
2018-01-05 03:43:09 +01:00
|
|
|
use InvalidArgumentException;
|
|
|
|
use UnexpectedValueException;
|
|
|
|
|
2018-01-04 21:52:26 +01:00
|
|
|
/**
|
|
|
|
* Contains all non-specific methods, for possibly using Misuzu as a framework for other things.
|
|
|
|
*/
|
2018-01-04 21:01:55 +01:00
|
|
|
abstract class ApplicationBase
|
|
|
|
{
|
2018-01-04 21:52:26 +01:00
|
|
|
/**
|
|
|
|
* Things extending ApplicationBase are single instance, this property contains the active one.
|
|
|
|
* @var ApplicationBase
|
|
|
|
*/
|
2018-01-04 21:01:55 +01:00
|
|
|
private static $instance = null;
|
2018-01-04 21:52:26 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the currently active instance of ApplicationBase
|
|
|
|
* @return ApplicationBase
|
|
|
|
*/
|
|
|
|
public static function getInstance(): ApplicationBase
|
2018-01-04 21:01:55 +01:00
|
|
|
{
|
2018-01-04 21:52:26 +01:00
|
|
|
if (is_null(self::$instance) || !(self::$instance instanceof ApplicationBase)) {
|
2018-01-05 03:43:09 +01:00
|
|
|
throw new UnexpectedValueException('Invalid instance type.');
|
2018-01-04 21:01:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return self::$instance;
|
|
|
|
}
|
|
|
|
|
2018-01-04 21:52:26 +01:00
|
|
|
/**
|
2018-04-25 00:55:46 +02:00
|
|
|
* ApplicationBase constructor.
|
2018-01-04 21:52:26 +01:00
|
|
|
*/
|
2018-04-25 00:55:46 +02:00
|
|
|
public function __construct()
|
2018-01-04 21:01:55 +01:00
|
|
|
{
|
2018-01-04 21:52:26 +01:00
|
|
|
if (!is_null(self::$instance) || self::$instance instanceof ApplicationBase) {
|
2018-01-05 03:43:09 +01:00
|
|
|
throw new UnexpectedValueException('An Application has already been set up.');
|
2018-01-04 21:01:55 +01:00
|
|
|
}
|
|
|
|
|
2018-04-25 00:55:46 +02:00
|
|
|
self::$instance = $this;
|
2018-01-04 21:01:55 +01:00
|
|
|
}
|
|
|
|
}
|