--- /dev/null
+--TEST--
+Bug #28444 (Cannot access undefined property for object with overloaded property access)
+--FILE--
+<?php
+
+class Object
+{
+ public $x;
+
+ function __construct($x)
+ {
+ $this->x = $x;
+ }
+}
+
+class Overloaded
+{
+ public $props = array();
+ public $x;
+
+ function __construct($x)
+ {
+ $this->x = new Object($x);
+ }
+
+ function __get($prop)
+ {
+ echo __METHOD__ . "($prop)\n";
+ return $this->props[$prop];
+ }
+
+ function __set($prop, $val)
+ {
+ echo __METHOD__ . "($prop,$val)\n";
+ $this->props[$prop] = $val;
+ }
+}
+$y = new Overloaded(2);
+var_dump($y->x);
+var_dump($y->x->x);
+var_dump($y->x->x = 3);
+var_dump($y->y = 3);
+var_dump($y->y);
+var_dump($y->z = new Object(4));
+var_dump($y->z->x);
+$t = $y->z;
+var_dump($t->x = 5);
+var_dump($y->z->x = 6);
+
+?>
+===DONE===
+--EXPECTF--
+object(Object)#%d (1) {
+ ["x"]=>
+ int(2)
+}
+int(2)
+int(3)
+Overloaded::__set(y,3)
+int(3)
+Overloaded::__get(y)
+int(3)
+Overloaded::__set(z,Object id #3)
+object(Object)#%d (1) {
+ ["x"]=>
+ int(4)
+}
+Overloaded::__get(z)
+int(4)
+Overloaded::__get(z)
+int(5)
+Overloaded::__get(z)
+int(6)
+===DONE===
--- /dev/null
+--TEST--
+Bug #29368 (The destructor is called when an exception is thrown from the constructor)
+--FILE--
+<?
+
+class Foo
+{
+ function __construct()
+ {
+ echo __METHOD__ . "\n";
+ throw new Exception;
+ }
+ function __destruct()
+ {
+ echo __METHOD__ . "\n";
+ }
+}
+
+try
+{
+ $bar = new Foo;
+} catch(Exception $exc)
+{
+ echo "Caught exception!\n";
+}
+
+unset($bar);
+
+?>
+===DONE===
+--EXPECTF--
+Foo::__construct
+Caught exception!
+===DONE===
--- /dev/null
+--TEST--
+invoke() with base class method
+--FILE--
+<?php
+
+class Foo
+{
+ function Test()
+ {
+ echo __METHOD__ . "\n";
+ }
+}
+
+class Bar extends Foo
+{
+ function Test()
+ {
+ echo __METHOD__ . "\n";
+ }
+}
+
+$o = new Bar;
+$r = new ReflectionMethod('Foo','Test');
+
+$r->invoke($o);
+
+?>
+===DONE===
+--EXPECT--
+Foo::Test
+===DONE===