<?php
abstract class almostSingleton {
final protected function __construct() {
echo 'Built ' . get_class($this) . PHP_EOL;
}
}
class GoodTwin extends almostSingleton {
}
class EvilTwin extends almostSingleton {
public static function static_getGoodTwin() {
return new GoodTwin();
}
public function getGoodTwin() {
return new GoodTwin();
}
}
$gotcha = EvilTwin::static_getGoodTwin();
$et = new EvilTwin();
$nope = $et->getGoodTwin();
Built GoodTwin
Fatal error: Uncaught Error: Call to protected almostSingleton::__construct() from global scope in /in/glRkc:22
Stack trace:
#0 {main}
thrown in /in/glRkc on line 22
Process exited with code 255.
Built GoodTwin
Fatal error: Uncaught Error: Call to protected almostSingleton::__construct() from invalid context in /in/glRkc:22
Stack trace:
#0 {main}
thrown in /in/glRkc on line 22
Process exited with code 255.
Built GoodTwin
Fatal error: Call to protected almostSingleton::__construct() from invalid context in /in/glRkc on line 22
Process exited with code 255.
Output for 5.0.2 - 5.0.5, 5.1.0 - 5.1.6
Built GoodTwin
Fatal error: Call to protected almostSingleton::__construct() from context '' in /in/glRkc on line 22
Process exited with code 255.
Output for 5.0.0 - 5.0.1
Notice: Use of undefined constant PHP_EOL - assumed 'PHP_EOL' in /in/glRkc on line 5
Built GoodTwinPHP_EOL
Fatal error: Call to protected almostSingleton::__construct() from context '' in /in/glRkc on line 22
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_CLASS in /in/glRkc on line 3
Process exited with code 255.