From: Nikita Popov Date: Tue, 3 Nov 2020 15:45:13 +0000 (+0100) Subject: Don't disable early binding during preloading script X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=54668a449e2e535f638b6b0bc22c8c3956e534a2;p=php Don't disable early binding during preloading script We should only disable early binding during the opcache_compile_file() calls, not inside the preloading script or anything it includes. The right condition to check for is whether we compile the file without execution, as declaring classes is "execution". --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 0fd9c04330..af137e424d 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7385,7 +7385,7 @@ void zend_compile_class_decl(znode *result, zend_ast *ast, zend_bool toplevel) / if (toplevel /* We currently don't early-bind classes that implement interfaces or use traits */ && !ce->num_interfaces && !ce->num_traits - && !(CG(compiler_options) & ZEND_COMPILE_PRELOAD)) { + && !(CG(compiler_options) & ZEND_COMPILE_WITHOUT_EXECUTION)) { if (extends_ast) { zend_class_entry *parent_ce = zend_lookup_class_ex( ce->parent_name, NULL, ZEND_FETCH_CLASS_NO_AUTOLOAD); diff --git a/ext/opcache/tests/preload_early_binding.inc b/ext/opcache/tests/preload_early_binding.inc new file mode 100644 index 0000000000..0adcd6b6d7 --- /dev/null +++ b/ext/opcache/tests/preload_early_binding.inc @@ -0,0 +1,3 @@ + +--FILE-- +OK +--EXPECT-- +object(X)#1 (0) { +} +OK