Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:84782 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 71520 invoked from network); 14 Mar 2015 20:00:45 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 14 Mar 2015 20:00:45 -0000 X-Host-Fingerprint: 87.163.225.237 p57A3E1ED.dip0.t-ipconnect.de Received: from [87.163.225.237] ([87.163.225.237:17130] helo=localhost.localdomain) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id D5/10-03391-B6394055 for ; Sat, 14 Mar 2015 15:00:44 -0500 Message-ID: To: internals@lists.php.net Date: Sat, 14 Mar 2015 21:00:38 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 References: <6D.2C.32765.10EC0055@pb1.pair.com> <5500D967.5040800@gmail.com> <13.69.64353.73451055@pb1.pair.com> <5501876C.3020107@gmail.com> <3D.85.42021.3E7A1055@pb1.pair.com> <5501B77D.5010800@gmail.com> <85.D1.24603.247C1055@pb1.pair.com> <5501D328.9040800@gmail.com> <98.26.24603.C9DE1055@pb1.pair.com> <5501F823.3060805@gmail.com> <55028793.5040606@googlemail.com> <04.FE.24603.D5CB2055@pb1.pair.com> <5503D9E8.1090008@googlemail.com> <57.60.52108.BE854055@pb1.pair.com> <5504712D.4010103@googlemail.com> In-Reply-To: <5504712D.4010103@googlemail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Posted-By: 87.163.225.237 Subject: Re: [PHP-DEV] static constructor From: mail@deroetzi.de (Johannes Ott) Am 14.03.2015 um 18:34 schrieb Crypto Compress: > >>>> So I do not see the need of a explicit class deconstructor, because the >>>> language should already react correctly on this issues as I can see so >>>> far >>> The language cannot know the order of dependencies and how to destruct >>> them. >> A dependcy between destructors of instances, which the language have to >> know by itself that sounds horrific indeed. >> >> If one instance has destruction dependcies to other instances, you >> should have used any kind of linking pattern between this instances so >> the __destruct of the first instance destructed can handle the >> destruction dependcies. At the moment I cannot think about any use case, >> where this should be done another way. Maybe you have a concret example >> for me, so I can think about this? > > a) Implicit order of dependencies: > Logger should be the last destructed > DatabaseLogger before FileLogger before error_log-Logger... > Okay the Implicit order for class unload should be safe, if you use the Logger classes inside class A and class B, PHP should unload the class Logger as last one after A and B. The unload order of DatabaseLogger before FileLogger is a internal of the Logger Instances as Logger itself is a singleton Factory: For example: class LogAdapter { private static $instances = []; public static getLoggerInstance($classname) { if (!array_key_exists($classname, self::$instances)) { self::$instances[$classname] = new Logger($classname); } return self::$instances[$classname]; } } class Logger() { ... public __destruct() { //Unload whatever you need. } } > b) How to destruct: > Write "Bye!" before closing socket. > > To manage a socket connection is not a typical use case for a "global" static class context because normal use case of a Socket class is to manage different Sockets. So this is typically a instance pattern to use, where the __destruct() can say bye. >> On destruction/unload of a class the language should be able to unset >> static properties in random order for this reason, without any need of a >> class destructor?! > > Reverse creation order. The random was just meant as placeholder for the fact that for static properties it should not matter in which order they are unset by the language. Can be reverse creation order or something else. Regards -- DerOetzi