Well, its at the application level now because the language doesn't provide
another alternative. Preferably, it would be at the system level. Your
argument would be similar to saying that __construct should be explicit and
called at the application level to initialize an object. Static classes may
need initilization as well. This is modeled after C#'s static constructors
and Java's static blocks. It also enables other classes to access complex
static variables directly without going through a static method to
initialize the property first. I agree that its not needed, but now that we
have static class methods, it would be nice for the language to provide
built in initialization facilities.

Bob



-----Original Message-----
From: Noah Botimer [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, October 05, 2004 4:57 PM
To: Robert Silva
Cc: [EMAIL PROTECTED]
Subject: Re: [PHP-DEV] Static Constructors

Hi Robert,

I hate to sound like a pedant, but shouldn't anything like that be 
explicit?  That is, do your own check for prerequisite class variables 
that need to be set in each static method?  Maybe I'm missing the boat, 
but I'd say that it would be something that should be at the application 
level, rather than at the system/object-model level.

In your example:

...
public static function WriteLine($value) {
   if (is_null(self::$logfile))
     self::initialize();
   ...
}

public static initialize() {
   self::$logfile = fopen('log.txt', 'a');
}
...

Thanks,
-Noah


Robert Silva wrote:

> I've put together a rough implementation of static constructors. I'd like
to
> get peoples thoughts about it then I'll either clean it up and submit it
or
> nuke it. Basically the class constructor __cconstruct (have any better
> ideas?) is called upon the first access to any static property and marks
the
> class entry as initialized.
> 
> <?
> 
> class Logger {
>     public static $logfile = null;
> 
>     private static function __cconstruct() {
>         self::$logfile = fopen('log.txt', 'a');
>     }
>     public static function WriteLine($value) {
>         $value .= PHP_EOL;
>         fputs(self::$logfile, $value, strlen($value));
>     }
> 
> }
> 
> Logger::WriteLine('Static constructors');
> 
> ?>
> 

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

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

Reply via email to