mirror of
https://github.com/php/php-src.git
synced 2024-11-28 04:14:26 +08:00
Fix static method arg binding in traits
This commit is contained in:
parent
75af8150f5
commit
3ad0e1d6ca
28
Zend/tests/traits/no_static_arg_binding.phpt
Normal file
28
Zend/tests/traits/no_static_arg_binding.phpt
Normal file
@ -0,0 +1,28 @@
|
||||
--TEST--
|
||||
Don't statically bind arguments for self:: calls in traits
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
trait T {
|
||||
public static function method($arg) {
|
||||
}
|
||||
public static function call() {
|
||||
$i = 0;
|
||||
self::method($i);
|
||||
var_dump($i);
|
||||
}
|
||||
}
|
||||
|
||||
class C {
|
||||
use T;
|
||||
|
||||
public static function method(&$arg) {
|
||||
$arg++;
|
||||
}
|
||||
}
|
||||
|
||||
C::call();
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
int(1)
|
@ -77,6 +77,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
|
||||
zend_string *class_name = Z_STR_P(&ZEND_OP1_LITERAL(opline) + 1);
|
||||
ce = zend_hash_find_ptr(&ctx->script->class_table, class_name);
|
||||
} else if (opline->op1_type == IS_UNUSED && op_array->scope
|
||||
&& !(op_array->scope->ce_flags & ZEND_ACC_TRAIT)
|
||||
&& (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
|
||||
ce = op_array->scope;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user