Bug #66773 [Com]: Autoload with Opcache allows importing conflicting class name to namespace

From: Date: Thu, 23 Oct 2014 10:07:34 +0000
Subject: Bug #66773 [Com]: Autoload with Opcache allows importing conflicting class name to namespace
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-188274@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=66773&edit=1 ID: 66773 Comment by: nikic@php.net Reported by: carl dot vuorinen at w3 dot fi Summary: Autoload with Opcache allows importing conflicting class name to namespace Status: Assigned Type: Bug Package: opcache Operating System: Linux (Ubuntu) PHP Version: 5.5.9 Assigned To: dmitry Block user comment: N Private report: N New Comment: I agree with Dmitry, it would be best to allow shadowing class definitions with imports in PHP 7. The current behavior is pretty weird, especially as it depends on the order in which classes are loaded. Previous Comments: ------------------------------------------------------------------------ [2014-10-23 09:17:47] dmitry@php.net Unfortunately, the patch is wrong. Opcache compiles each script separately by design. Otherwise, it'll may make dependencies on other scripts. And later to unpredictable behavior, if some of those scripts are changed and recompiled but depended is not. The patch breaks this rule. Actually, the behavior with opcache seems better :) May be it makes sense switching to it in PHP7. ------------------------------------------------------------------------ [2014-10-22 09:41:14] jpauli@php.net I got a patch at https://github.com/jpauli/ZendOptimizerPlus/compare/66773 I compiles and works just fine for 5.5, shouldn't diff for other versions. Dmitry, this needs review ------------------------------------------------------------------------ [2014-06-23 16:17:26] devosc at gmail dot com I prefer the new behaviour and would like it to be kept/maintained. ------------------------------------------------------------------------ [2014-06-23 12:30:38] jpauli@php.net Reproduced. Seems like a bug. @dmitry: any idea ? I found that the compiler class_table is reseted between each compilation by opcache (https://github.com/zendtech/ZendOptimizerPlus/blob/master/ZendAccelerator.c#L1411), thus the class can't be found and detected as already used. ------------------------------------------------------------------------ [2014-05-27 01:11:55] adrien dot crivelli at gmail dot com Same issue here. The test script could be reproduced: $ lsb_release -a LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:core-3.0-noarch:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:core-4.0-amd64:core-4.0-noarch Distributor ID: Ubuntu Description: Ubuntu 14.04 LTS Release: 14.04 Codename: trusty $ php -v PHP 5.5.9-1ubuntu4 (cli) (built: Apr 9 2014 17:11:57) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans $ php -i | grep opcache.enable_cli opcache.enable_cli => On => On $ php execute.php self: Some\Bar parent: Other\Bar $ php -i | grep opcache.enable_cli opcache.enable_cli => Off => Off $ php execute.php PHP Fatal error: Cannot use Other\Bar as Bar because the name is already in use in /tmp/a/some_foo.php on line 5 PHP Stack trace: PHP 1. {main}() /tmp/a/execute.php:0 PHP 2. spl_autoload_call() /tmp/a/execute.php:13 PHP 3. {closure:/tmp/a/execute.php:6-8}() /tmp/a/execute.php:0 PHP 4. spl_autoload() /tmp/a/execute.php:7 Fatal error: Cannot use Other\Bar as Bar because the name is already in use in /tmp/a/some_foo.php on line 5 Call Stack: 0.0002 235776 1. {main}() /tmp/a/execute.php:0 0.0005 242720 2. spl_autoload_call() /tmp/a/execute.php:13 0.0005 242752 3. {closure:/tmp/a/execute.php:6-8}() /tmp/a/execute.php:0 0.0005 242880 4. spl_autoload() /tmp/a/execute.php:7 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=66773 -- Edit this bug report at https://bugs.php.net/bug.php?id=66773&edit=1

« previous php.bugs (#188274) next »