Fixed implementation of internal interfaces in namesapces

This commit is contained in:
Dmitry Stogov 2007-11-09 12:15:41 +00:00
parent 4b731b1af0
commit 98b3c247a8
2 changed files with 32 additions and 1 deletions

31
Zend/tests/ns_054.phpt Executable file
View File

@ -0,0 +1,31 @@
--TEST--
054: namespace and interfaces
--SKIPIF--
<?php if (!extension_loaded("spl")) die("skip SPL is no available"); ?>
--FILE--
<?php
namespace test::ns1;
class Foo implements SplObserver {
function update(::SplSubject $x) {
echo "ok\n";
}
}
class Bar implements SplSubject {
function attach(::SplObserver $x) {
echo "ok\n";
}
function notify() {
}
function detach(::SplObserver $x) {
}
}
$foo = new Foo();
$bar = new Bar();
$bar->attach($foo);
$foo->update($bar);
?>
--EXPECT--
ok
ok

View File

@ -3136,7 +3136,7 @@ void zend_do_implements_interface(znode *interface_name TSRMLS_DC)
if (CG(active_op_array)->last > 0) {
opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
if (opline->opcode == ZEND_FETCH_CLASS) {
opline->extended_value = ZEND_FETCH_CLASS_INTERFACE;
opline->extended_value = (opline->extended_value & ~ZEND_FETCH_CLASS_MASK) | ZEND_FETCH_CLASS_INTERFACE;
}
}
break;