Hi all,

Benjamin has in fact unearthed a bug in the implementation of import.
This code:

<?php
namespace Foo;
import Blah::Exception;
$a = new Exception;
?>

should in fact be implicitly importing Blah::Exception as if it were
Foo::Exception, rather than as ::Exception.  In other words, I would
actually expect the above code to be equivalent to:

<?php
namespace Foo;
import Blah::Exception as Foo::Exception;
$a = new Foo::Exception;
?>

This is a simple fix.
http://lxr.php.net/source/ZendEngine2/zend_compile.c#5122 should be
using zend_do_build_namespace_name() with CG(current_namespace) to
retrieve the actual classname to import, rather than just the last part
after ::.  With this change, the example code above would work without
conflicting with either the built-in exception or Foo::Exception unless
Foo::Exception is included from another file, which would give the
correct error.

I'm afraid I don't have time for a proper patch right now, but it is a
very simple fix, we would just need to add a few lines to put the
classname zval and CG(current_namespace) into znodes and pass to
zend_do_build_namespace_name(), then extract the created zval for name.

Greg

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to