Re: Method overloading by method signature
| From: | Alexey Zakhlestin | Date: | Sun, 14 Oct 2007 08:04:17 +0000 |
| Subject: | Re: Method overloading by method signature | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-32753@lists.php.net to get a copy of this message | ||
On 10/14/07, Hans Moog <hans.moog@mkj-computing.de> wrote:
> It shows an error that fun1 is not implemented for the signature of the passed parameters.
>
> But you could still provide a method that matches any number and type of parameters by adding
> the following method declaration.
Well, this looks exactly like incompatibility to me, because currently
any function accepts any number of parameters (and you get
non-explicit ones by using func_get_args())
>
> /**
> * This method accepts parameters of any type and any count.
> */
> public function fun1($parameters ...) {
> /*
> * array(3) {
> * [0] => string(1) "a"
> * [1] => string(2) "b"
> * [2] => string(3) "c"
> * }
> */
> var_dump($parameters);
> }
>
>
> The "..." notation (making it possible to have a dynamic count of parameters of the
> given type (missing typehint automatically chooses mixed)) is only allowed for the last parameter.
>
> So method defintions like the following one are also possible:
>
>
> public function fun1(string $firstParam, string $remainingParameters ...) {
> /*
> * string(1) "a"
> */
> var_dump($firstParam);
>
> /*
> * array(3) {
> * [0] => string(1) "b"
> * [1] => string(2) "c"
> * }
> */
> var_dump($remainingParameters);
> }
>
> -----Ursprüngliche Nachricht-----
> Von: Alexey Zakhlestin [mailto:indeyets@gmail.com]
> Gesendet: Samstag, 13. Oktober 2007 23:20
> An: Hans Moog
> Cc: internals@lists.php.net
> Betreff: Re: [PHP-DEV] Method overloading by method signature
>
> can your patch handle the following situation? how?
>
> class A
> {
> public function fun1($a)
> {
> //…
> }
>
> public function fun1($a, $b)
> {
> //…
> }
> }
>
> $a = new A();
> $a->fun1('a', 'b', 'c'); // which method is called here?
>
> On 10/14/07, Hans Moog <hans.moog@mkj-computing.de> wrote:
> > Why would it be incompatible with php's dynamic nature? (I already heard many people
> > saying "that this is not the php way") But why ? Don't you like it or do you think it
> > is just not possible to be implemented in php?
> >
> > I could provide a patch that makes it possible (even with complete visibility and
> > inheritance rules). We already use it and it saves us a lot of code.
> >
> > I think it is better than the '$x = "defaultValue"' kind of way to
> > accept different count and types of parameters because it is MUCH more expressive and intuitive.
> >
> > It wouldn't even break backward compatibility beause it is just "syntactical
> > sugar" to checking the variable types manually and then dispatching to the right behaviour.
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Alexey Zakhlestin [mailto:indeyets@gmail.com]
> > Gesendet: Samstag, 13. Oktober 2007 22:22
> > An: Hans Moog
> > Cc: internals@lists.php.net
> > Betreff: Re: [PHP-DEV] Method overloading by method signature
> >
> > Hans, such overloading would be incompatible with php's dynamic nature
> > As far as I remember, even type-hinting for basic-types (strings,
> > integers) was rejected
> >
> > On 10/13/07, Hans Moog <hans.moog@mkj-computing.de> wrote:
> > > Will method overloading by method signature be implemented in php6 or
> > > even php 5.3?
> > >
> > >
> > >
> > > Example:
> > >
> > > <?php
> > >
> > > namespace xyz;
> > >
> > >
> > >
> > > import core::TestClass;
> > >
> > >
> > >
> > > class Test extends TestClass {
> > >
> > > public string function test(integer $int) {
> > >
> > > return "Hi";
> > > }
> > >
> > >
> > >
> > > public integer function test(string $string, integer $int) {
> > >
> > > return $int;
> > > }
> > > }
> > >
> > > ?>
> > >
> > >
> > >
> > > I think this would be a very big advantage and would help developers to
> > > write better code.
> > >
> > >
> >
> >
> > --
> > Alexey Zakhlestin
> > http://blog.milkfarmsoft.com/
> >
> >
> >
>
>
> --
> Alexey Zakhlestin
> http://blog.milkfarmsoft.com/
>
>
>
--
Alexey Zakhlestin
http://blog.milkfarmsoft.com/