File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / Zend / tests / bug38220.phpt
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:47:52 2012 UTC (13 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, v5_3_10, HEAD
php

    1: --TEST--
    2: Bug #38220 (Crash on some object operations)
    3: --FILE--
    4: <?php
    5: class drv {
    6: 	public $obj;
    7: 
    8: 	function func1() {
    9: 		echo "func1(): {$this->obj->i}\n";
   10: 	}
   11: 
   12: 	function close() {
   13: 		echo "close(): {$this->obj->i}\n";
   14: 	}
   15: }
   16: 
   17: class A {
   18: 	public $i;
   19: 
   20: 	function __construct($i) {
   21: 		$this->i = $i;
   22: 
   23: 	}
   24: 
   25: 	function __call($method, $args) {
   26: 		$drv = myserv::drv();
   27: 
   28: 		$drv->obj = $this;
   29: 
   30: 		echo "before call $method\n";
   31: 		print_r($this);
   32: 		call_user_func_array(array($drv, $method), $args);
   33: 		echo "after call $method\n";
   34: 
   35: 		// Uncomment this line to work without crash
   36: //		$drv->obj = null;
   37: 	}
   38: 
   39: 	function __destruct() {
   40: 		echo "A::__destruct()\n";
   41: 		$this->close();
   42: 	}
   43: }
   44: 
   45: class myserv {
   46: 	private static $drv = null;
   47: 
   48: 	static function drv() {
   49: 		if (is_null(self::$drv))
   50: 			self::$drv = new drv;
   51: 		return self::$drv;
   52: 	}
   53: }
   54: 
   55: $obj1 = new A(1);
   56: $obj1->func1();
   57: 
   58: $obj2 = new A(2);
   59: unset($obj1);
   60: $obj2->func1();
   61: ?>
   62: --EXPECT--
   63: before call func1
   64: A Object
   65: (
   66:     [i] => 1
   67: )
   68: func1(): 1
   69: after call func1
   70: A::__destruct()
   71: before call close
   72: A Object
   73: (
   74:     [i] => 1
   75: )
   76: close(): 1
   77: after call close
   78: before call func1
   79: A Object
   80: (
   81:     [i] => 2
   82: )
   83: func1(): 1
   84: after call func1
   85: A::__destruct()
   86: before call close
   87: A Object
   88: (
   89:     [i] => 2
   90: )
   91: close(): 2
   92: after call close

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>