Hi !
You misunderstand what LSP means. It does not mean "overriding methods
should have same signatures", it means "overriding methods should
accept any data that base method accepts". It never says it can not
accept any other data.
Idem.
So you can have :
class A { public function f($a) { ... } }
class A1 extends A { public function f($a = null) { ... } }
class A2 extends A { public function f($a, $b = null) { ... } }
BUT You can't have :
class A3 extends A { public function f() { ... } }
I'm agree that it's valid from PHP point of view because the language
does not handle the argument in $a3->f(uniqid()), but it's totaly
invalid from OOP point of view.
So if it's invalid for "normal" method, it's more invalid for abstract
method, even if abstract method is constructor.
Abstract method define a MANDATORY interface.
So you can have :
abstract class A { public abstract function f($a); }
class A1 extends A { public function f($a = null) { ... } }
class A2 extends A { public function f($a, $b = null) { ... } }
BUT You can't have :
class A3 extends A { public function f() { ... } }
And the use of func_get_args() is not incompatible with that :
class A4 extends A {
public function ($a) {
$variadicArgs = array_slice(func_get_args(), 1);
}
}
Best regard,
Fred
--
========================================================================
Frédéric Hardy : Architecte d'application/Admin. système/Ergonome
CV : http://blog.mageekbox.net/public/cv.frederic.hardy.pdf
Blog : http://blog.mageekbox.net
Twitter : http://twitter.com/mageekguy
========================================================================
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php