php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #71722 PHP destructor order is arbitrary with static objects
Submitted: 2016-03-06 14:50 UTC Modified: 2016-03-26 23:48 UTC
From: me at chelseau dot com Assigned:
Status: Duplicate Package: Unknown/Other Function
PHP Version: Irrelevant OS: Mac OSX
Private report: No CVE-ID: None
 [2016-03-06 14:50 UTC] me at chelseau dot com
Description:
------------
This occurs with all versions of PHP it seems. I've tested with the current snap:

PHP 7.1.0-dev (cli) (built: Mar  6 2016 06:13:27) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies

To reproduce, store 2 class instances statically. Even if class (Foo) stores a ref to class (Bar), if (Bar) is initialized first it is destructed first, allowing (Foo) to access an object whose destructor has already been called.

It seems that objects stored in static (global) refs are destroyed based on those globals only rather than potential local refs.

I would expect the destructor for (Foo) to fire first because Foo has a ref to (Bar)

Test script:
---------------
https://3v4l.org/Ifgn9

Expected result:
----------------
Bar::__construct
Foo::__construct
Foo::__destruct
Bar::func
Bar::__destruct

Actual result:
--------------
Bar::__construct
Foo::__construct
Bar::__destruct
Foo::__destruct
Bar::func

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-03-26 23:42 UTC] nikic@php.net
Duplicate of bug #53769.
 [2016-03-26 23:48 UTC] nikic@php.net
-Status: Open +Status: Duplicate
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sun Oct 24 10:03:33 2021 UTC