> From: Soenke Ruempler [mailto:[EMAIL PROTECTED] 

> BUT let derived constructors change parameters
> a) as constructors are never called from the parent, but 
> optionally from a child class, it's completely valid IHMO 
> b) constructors are usally not used in object aggregation / 
> setters, but called only _ONCE_ at object creation => the 
> creating code knows the exact (sub-)class and it's constructor.

You gave the reason why the restrictions don't apply for constructors
(also not in PHP) and probably nobody will change that for "academic
reasons" :)

Constructors are the special case in OOP as you can call constructors
only by instantiating classes. When using them you always refer to a
concrete class and never have to deal with polymorphic subtypes (of
course constructors can be overloaded in languages that support it). 

Thus constructors are a place where differences between subtypes tend to
pile up so that the LSP holds for the rest of the inherited methods.

If you *want* to enforce constructor signatures PHP allows for defining
them in interfaces which makes no sense from the academic pov, but may
be useful when using the PHP feature of "new $classname($arg)" where you
want to make sure first that "$classname instanceof
ISomehowConstructable" (where instanceof must take a string as the first
operand and work accordingly).

Regards,
Matthias

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

Reply via email to