ID:               32379
 User updated by:  freebsd at dds dot nl
 Reported By:      freebsd at dds dot nl
 Status:           Bogus
 Bug Type:         Feature/Change Request
 Operating System: *
 PHP Version:      5.*
 New Comment:

>From reading the code the compile or interpater knows or could know
that $y is of type X. It can not be something else. It could therefore
check if the functions that are used in that functions are defined 

The reason I request a warning is to prevent errors later. These error
could be accuring years later. To solve the error one need to read the
code in the class where the error happens. Then decides how to solve
this. Options are: to include the function defintion in the interface,
define a new interface or just define the function in the class. All
these option involve breaking code or setting oneself up to repeat
history.

Suppose I add a new class years later. I then would read the interface
I'm going to implement. So I have:
class Z implements X {
  punction function fa() {}
}

But when I use it it complains it wants fb(); I then read the interface
again. 

Why does php have interfaces?


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

[2005-03-20 23:21:13] [EMAIL PROTECTED]

PHP is loosely typed. What you request would change the nature of PHP
completley. Thus this will never happen.

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

[2005-03-20 23:05:33] freebsd at dds dot nl

My email is wrong it should be freebsd at akruijff dot nl. It seems I
can nott change this.

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

[2005-03-20 23:03:18] freebsd at dds dot nl

If this isn't a bug I would like it to become a feature.

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

[2005-03-20 00:55:05] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

Type hints don\'t check what you are doing with your object, 
they just help you to know what you have... 

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

[2005-03-20 00:40:59] freebsd at dds dot nl

Description:
------------
Type hinting doesn't prevent you from calling functions of children
that are not defined in the interface or (abstract) class. This mean
you could call a function of object x, then create a new class (y) that
doesn't implement this function, resulting in an error later on.

Basicaly the principle of encapsulation (on class level) isn't
enforced.



Reproduce code:
---------------
<?php
  interface X {
    public function fa();
  }

  class Y implements X {
    public function fa() {}
    public function fb() { echo "no error / warning?"; }
  }

  function f(X $y) {
    $y->fb();
  }

  f(new Y()); 
?>


Expected result:
----------------
An error (or at least a warning).

Actual result:
--------------
n/a


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


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

Reply via email to