Расширение PHP Zend Engine и статические методы

При написании расширения для php (5.3) я хочу получить доступ к указателю zend_class_entry в статическом методе.

В нестатических методах я могу использовать макрос getThis() и внутри макроса Z_OBJCE_P следующим образом:

zend_class_entry ce* = Z_OBJCE_P(getThis());

Теперь проблема: в статических методах макрос getThis() возвращает указатель null, поэтому я не могу использовать макрос Z_OBJCE_P.

Есть ли у кого-нибудь решение для доступа к zend_class_entry из статического метода ??


person sassman    schedule 22.12.2010    source источник


Ответы (1)


это действительно интересно: в статических методах вы можете получить доступ к области видимости следующим образом

zend_class_entry* ce = 0L;
if (EG(called_scope)) {
    ce = EG(called_scope);
} else if (!EG(scope))  {
    ce = EG(scope);
}

Макрос EG получает доступ ко многим глобальным и контекстно-зависимым переменным, а также к области вызова, вызывающему классу статического метода.

person sassman    schedule 23.12.2010
comment
Обратите внимание, что вызываемая область не совпадает с (вызывающей) областью, первая связана с LSB, вторая, вероятно, вам нужна. - person Artefacto; 24.12.2010