blogclient.ru/estdomains-pochil-v-boze.htm - пред запись на блоге Программы для блогов. В очередной раз меня достал PHP своей недоделанностью, точнее сырой объектной моделью. Из последнего, что меня достало, так это то, что late binding появился только в php 5.3 в качестве эксперимента что ли. Да, мля, но даже с этим все равно не получается красиво сделать некоторые простые штуки.

PHP - сука, противный язык. Например не работают очевидные простые конструкции:

$Object = $ClassName::Instance() - ошибка парсинга кода, низя оказывается для :: использовать переменную, в которой находится имя класса. Ну ладно, выкрутился при помощи$Object = TSomeClass::Instance() - тоже не работает, так как внутри самого метода Instance невозможно определить имя класса, то есть получить TSomeClass, поскольку __class__ возвращает имя класса в котором находится определение Instance и следовательно для всех его потомков будет выдаваться только одно название родительского класса. В PHP 5.3 появился механизм позднего связывания для статических методов. Можно было бы красиво разрулить ситуацию при помощи конструкции вида$ClassName = static::GetClassName() где GetClassName прописать в каждом классе в виде
public static function GetclassName() {
return __class__;
}

То есть без копипаста совсем не обойтись. Эй! Где вы апологеты PHP? Что за жопа этот ваш PHP? Если без копипаста не обойтись, то можно обойтись без и PHP 5.3 просто скопипастив целиком одну функцию Instance в каждый в класс. Что мне и пришлось сделать. Так что теперь каждый класс у меня начинается со следующего.


public static function &Instance() {
global  $GlobalInstances;
$ClassName = __class__;
if (!isset($GlobalInstances[$ClassName])) {
$GlobalInstances[$ClassName] = &new $ClassName ();
}
return $GlobalInstances[$ClassName];
}

Мой блог находят по следующим фразам
как можно заливать на narod.ru
программы для T. sonic 610
openvpn
работа со строками в TLIstView
кодировка сервера
denwer файл баз данных