Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

понедельник, 11 октября 2010 г.

PHP. Как узнать имя класса в контексте статического метода.

Тут очень полезна функция get_called_class(), которая доступна начиная с версии PHP 5.3
Реализация абстрактного одиночки:

abstract class Singleton {

protected function __construct() {
}

final public static function getInstance() {
static $aoInstance = array();

$calledClassName = get_called_class();

if (! isset ($aoInstance[$calledClassName])) {
$aoInstance[$calledClassName] = new $calledClassName();
}

return $aoInstance[$calledClassName];
}

final private function __clone() {
}
}

class DatabaseConnection extends Singleton {

protected $connection;

protected function __construct() {
// @todo Connect to the database
}

public function __destruct() {
// @todo Drop the connection to the database
}
}

$oDbConn = new DatabaseConnection(); // Fatal error

$oDbConn = DatabaseConnection::getInstance(); // Returns single instance

Комментариев нет:

Отправить комментарий