diff options
| -rwxr-xr-x | Zend/tests/ns_054.phpt | 31 | ||||
| -rw-r--r-- | Zend/zend_compile.c | 2 |
2 files changed, 32 insertions, 1 deletions
diff --git a/Zend/tests/ns_054.phpt b/Zend/tests/ns_054.phpt new file mode 100755 index 0000000000..0eb9e0448f --- /dev/null +++ b/Zend/tests/ns_054.phpt @@ -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 diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index e4a38f3046..4d70797daa 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -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; |
