Расширение PHP Zend Engine и статические методы - PullRequest
3 голосов
/ 23 декабря 2010

При написании расширения для 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 статическим методом ??

1 Ответ

3 голосов
/ 23 декабря 2010

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

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

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

...