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...
> 
> b) How to destruct:
> Write "Bye!" before closing socket.
> 
> 
>> 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.

Sorry for replying to myself, but I'm just preparing the RFC and while
reading the complete thread again. I think I now get the
misunderstanding I had on your destructor question and want to clear that:

> In your examples you employ some external resources in cctor (e.g.
> logger, db, ini-files). Do you intend to propose a cdtor to release
> this resources?

I never ever would store any kind of resources (opening any kind of
connections to db, file, socket etc.) directly to the static context
without wrapping in a instance, because those are really dynamic handles
which need a proper constructor and destructor for the special connection.

If I use inside the static constructor only for reading purpose and have
to ensure that they are closed again. This can be done directly inside
the static constructor or in case of my DBAdapter holding the
DBConnection instance at the very end of my application.


For example

class Example {

    private static $dataFromFile;

    private static $dataFromDB;

    private static $localReferenceToLogger;

    private static function __static() {

        //Read from file
        $fHandle = fopen('example.ini', 'r');
        self::$dataFromFile = fread($fHandle, 1024);
        fclose($fHandle);

        //Shorted DB Example
        self::$dataFromDB = DBAdapter::readFromDB();

        //Get local Reference to logger instance;
        self::$localReferenceToLogger =
LogAdapter::getLoggerInstance(self::class);
    }


}

//Somewhere at the end of my application

DBAdapter::closeAllConnections();

Hope I could get some light to the problem you meant?

Regards,
-- 
DerOetzi

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to