public function __destruct() { global $test_cnt; $test_cnt--; } public static function destroy(&$obj) { unset($obj); } } Show(); $obj1 = new counter(); $obj1->Show(); Show(); $obj2 = new counter(); $obj2->Show(); Show(); counter::destroy($obj1); Show(); // or uncomment this line and it works //counter::destroy($obj2); echo "Done\n"; ?> --EXPECT-- Count: 0 Id: 0 Count: 1 Id: 1 Count: 2 Count: 1 Done