Skip to content

Commit 7c77ca3

Browse files
author
Julien Pauli
committed
Fix #65419 - Inside trait, self::class != __CLASS__
1 parent 42af411 commit 7c77ca3

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

Zend/tests/bug65419.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Bug #65419 (Inside trait, self::class != __CLASS__)
3+
--FILE--
4+
<?php
5+
trait abc
6+
{
7+
static function def()
8+
{
9+
echo self::class, "\n";
10+
echo __CLASS__, "\n";
11+
}
12+
}
13+
14+
class ghi
15+
{
16+
use abc;
17+
}
18+
19+
ghi::def();
20+
?>
21+
--EXPECTF--
22+
ghi
23+
ghi

Zend/zend_compile.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2140,6 +2140,12 @@ void zend_do_resolve_class_name(znode *result, znode *class_name, int is_static
21402140
if (!CG(active_class_entry)) {
21412141
zend_error(E_COMPILE_ERROR, "Cannot access self::class when no class scope is active");
21422142
}
2143+
if (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT) {
2144+
constant_name.op_type = IS_CONST;
2145+
ZVAL_STRINGL(&constant_name.u.constant, "class", sizeof("class")-1, 1);
2146+
zend_do_fetch_constant(result, class_name, &constant_name, ZEND_RT, 1 TSRMLS_CC);
2147+
break;
2148+
}
21432149
zval_dtor(&class_name->u.constant);
21442150
class_name->op_type = IS_CONST;
21452151
ZVAL_STRINGL(&class_name->u.constant, CG(active_class_entry)->name, CG(active_class_entry)->name_length, 1);

0 commit comments

Comments
 (0)