Rasmus Lerdorf wrote:

> I could see people doing:
>
>   class foo {
>     function foo() {
>        ...constructor stuff...
>     }
>     function __construct() {
>        $this->foo();
>     }
>   }

I actually prefer it the other way around...  foo would call __construct in
PHP4, and __construct would be called directly in PHP5 (with foo being
ignored).  As I understand the docs on php.net regading PHP5, the __construct
method has precedence over foo as a constructor.  I've also run into a case
where a class worked fine in PHP4 and not in PHP5 because of a method
existing with the same name as the class.  It was seen as a constructor, and
not a method, even though it is always called statically.  For example:

class Log {
  function log($msg) {
    // Log the message here
  }
}

Always called as:
  Log::log("log this message");

No instance of Log is ever created, which seemed to work in PHP4, but throws
errors in PHP5 about not being able to call Log::log statically (I assume
because it thinks its a constructor).  This probably isn't good practice to
use this sort of naming, but I didn't even think of Log::log as a constructor
in this case since the object itself is never instanciated.  Of course with
the static method/class qualifiers in PHP5, I could explicity way that in the
syntax, but such things aren't BC with PHP4...

> In order to make the class work on both PHP4 and PHP5 in which case it
> would be essential for foo() to be callable as a regular method in the
> class.

Yes, I like the unified constructor concept, and doing it this way makes that
work in PHP4 as well (at least as long as you have a base class which
implements both forms of constructors).

-Brad

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

Reply via email to