|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch zend_do_fetch_constant for Class/Object related Bug #63976Patch version 2013-03-19 09:59 UTC Return to Bug #63976 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: mike@php.net
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 1a8d108..633a771 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -5568,11 +5568,22 @@ void zend_do_fetch_constant(znode *result, znode *constant_container, znode *con
/* this is a class constant */
type = zend_get_class_fetch_type(Z_STRVAL(constant_container->u.constant), Z_STRLEN(constant_container->u.constant));
- if (ZEND_FETCH_CLASS_STATIC == type) {
+ switch (type) {
+ case ZEND_FETCH_CLASS_STATIC:
zend_error(E_ERROR, "\"static::\" is not allowed in compile-time constants");
- } else if (ZEND_FETCH_CLASS_DEFAULT == type) {
+ break;
+ case ZEND_FETCH_CLASS_DEFAULT:
zend_resolve_class_name(constant_container, fetch_type, 1 TSRMLS_CC);
+ break;
+ case ZEND_FETCH_CLASS_SELF:
+ if (CG(active_class_entry)) {
+ Z_STRVAL(constant_container->u.constant) = erealloc(Z_STRVAL(constant_container->u.constant), CG(active_class_entry)->name_length + 1);
+ memcpy(Z_STRVAL(constant_container->u.constant), CG(active_class_entry)->name, CG(active_class_entry)->name_length + 1);
+ Z_STRLEN(constant_container->u.constant) = CG(active_class_entry)->name_length;
+ }
+ break;
}
+
zend_do_build_full_name(NULL, constant_container, constant_name, 1 TSRMLS_CC);
*result = *constant_container;
result->u.constant.type = IS_CONSTANT | fetch_type;
|
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 16:00:01 2025 UTC |