- mt_rand: documentation ( source)
<?php
class hell {
private $ruler = 'devil';
function cry(){
echo $this->ruler;
}
}
$inst = new hell();
$inst->cry();
$in2 = Closure::bind(function () {$this->ruler = 'jesus';}, $inst, get_class($inst));
$in2();
$inst->cry();
class Singleton {
protected static $instance; // object instance
private function __construct(){ /* ... @return Singleton */ } // Защищаем от создания через new Singleton
private function __clone() { /* ... @return Singleton */ } // Защищаем от создания через клонирование
private function __wakeup() { /* ... @return Singleton */ } // Защищаем от создания через unserialize
public static function getInstance() { // Возвращает единственный экземпляр класса. @return Singleton
if ( !isset(self::$instance) ) {
$class = __CLASS__;
self::$instance = new $class();
selt::$instance->id = mt_rand(1,1000);
}
return self::$instance;
}
public function doAction() { echo $this->id; }
}
Singleton::getInstance()->doAction(); // Применение
$singy = Singleton::getInstance();