<?php
class Singleton {
private static $instance;
private function __construct() {}
private function __clone() {}
private function __wakeup() {}
public static function getInstance() {
if (empty(self::$instance))
self::$instance = new self();
return self::$instance;
}
}
$Object1 = Singleton::getInstance();
// -------------------------------------------------------
class PrivacyViolator {
private $_caller;
function __construct() {
$this->_caller = function ($method, $args) {
return call_user_func_array([$this, $method], $args);
};
}
function callPrivateMethod($object, $method, $args) {
return $this->_caller->bindTo($object, $object)->__invoke($method, $args);
}
}
$privacyViolator = new PrivacyViolator();
$c = $privacyViolator->callPrivateMethod($Object1, '__construct', []);
echo $Object1 == $c ? '+' : '-';
echo $Object1 === $c ? '+' : '-';
- Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
- Warning: The magic method Singleton::__wakeup() must have public visibility in /in/ss2mX on line 10
--
- Output for 5.4.2 - 5.4.45, 5.5.24 - 5.5.35, 5.6.7 - 5.6.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.10, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33
- --
preferences:
160.28 ms | 403 KiB | 227 Q