ID:               44043
 User updated by:  j dot boggiano at seld dot be
 Reported By:      j dot boggiano at seld dot be
 Status:           Open
 Bug Type:         Class/Object related
 Operating System: *
 PHP Version:      6CVS-2008-02-04 (snap)
 New Comment:

As I understand it, the following example would work, right ?

interface Foo {
        function bar(...);
}
class Baz implements Foo {
        function bar($first, $second, $third, $whatever) {}
}

If so, it's exactly what I'm looking for, your syntax is as good as
mine as far as I'm concerned. In fact it's even better as it allows for
a partial signature enforcement while still leaving the argument list
"opened".


Previous Comments:
------------------------------------------------------------------------

[2008-02-04 20:27:32] [EMAIL PROTECTED]

What we could do is adding '...'. That way you can do stuff like:

interface Foo {
  function bar($first, ...);
}

Now all classes that derive from Foo must implement the same function
protocol, for instance:

class Baz {
  function bar($first, ...) {}
}

Anything else would violate the inheritance rules.

------------------------------------------------------------------------

[2008-02-04 18:44:46] j dot boggiano at seld dot be

Description:
------------
The purpose of this is to allow an abstract class or an interface to
enforce the implementation of a method, without however enforcing the
arguments signature.

This is -as I understand it- not a bug, but a feature request.

Reproduce code:
---------------
/***
 * This works in PHP5 but does not anymore in PHP6
 */
class Parnt {
        public function foo() {}
}
class Child extends Parnt {
        public function foo($arg){}
}

/***
 * Those don't work in either 5 or 6
 */
abstract class Abst {
        abstract public function foo();
}
class Child2 extends Abst {
        public function foo($arg){}
}

interface Int {
        public function foo();
}
class Child3 implements Int {
        public function foo($arg){}
}

Expected result:
----------------
/***
 * Proposal for a solution
 */
abstract class AbstFixed {
        abstract public function foo;
}
class Child4 extends AbstFixed {
        public function foo($arg){}
}

// => Declaring the method without parenthesis (which currently throws
a parse error) would allow the implementations of this method to use any
argument signature they please.

Actual result:
--------------
At the moment those three examples throw a fatal error in PHP6 with :
Declaration of Child::foo() must be compatible with that of
Parnt::foo()

I don't think it is a bug, but I think having the capability to allow
variable function signatures would definitely be a plus, especially with
PHP6 coming that prevents the first example to work.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=44043&edit=1

Reply via email to