Bug #37854 [Com]: Type Hinting with derived classes and interfaces not working

2013-10-14 Thread worldoffame at hotmail dot com
Edit report at https://bugs.php.net/bug.php?id=37854&edit=1

 ID: 37854
 Comment by: worldoffame at hotmail dot com
 Reported by:spam at codeword dot net
 Summary:Type Hinting with derived classes and interfaces not
 working
 Status: Not a bug
 Type:   Bug
 Package:Class/Object related
 Operating System:   *
 PHP Version:*
 Block user comment: N
 Private report: N

 New Comment:

Well this is indeed a bug, how can you say it is not just because you think it 
is not? Although changing typehinting should be disallowed for completely 
irrelevant classes, but narrowing down the scope of typehinting(changing from 
superclass/interface to subclasses) is generally enabled in most OO languages. 
Funny you are telling the bug reporter to learn inheritance, just by judging 
from that test example he/she wrote? 

Just like the last comment says, the current way PHP does is clearly violating 
Liskov Substitution Principle. There are so many things that work in other OO 
languages that do not work in PHP. Okay PHP is not java, but its not just java, 
its all the OO languages you can think of.


Previous Comments:

[2012-04-20 10:39:54] kabanovdmitry at gmail dot com

Why then does PHP allow to narrow argument's type in subclass which extends 
base 
class?

This seems odd, because this violates Liskov Substitution Principle.


[2006-06-19 22:21:23] he...@php.net

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

First we don't allow changesin the typhints in derived classes/implementing 
classes. Second you need to learn inheritance rules again. Your code would 
break is-a relation.


[2006-06-19 22:11:34] spam at codeword dot net

Description:

When adding type hinting to an interface then implementing that interface using 
a derived class, the script compiler does not seem to recognise that the 
implemented type hint is derived from the interfaces type hint.  I hope that 
makes sense.  The code below may be more clear.

Reproduce code:
---
x;
  }
}
class ClassA {public$x = "Class is ClassA";  }
class ClassB extends ClassA{  public $x = "Class is ClassB";}
$myclass = new MyClass;
$a = new ClassA;
$b = new ClassB;
$myclass->test($b);
$myclass->test($a);
?>

Expected result:

Class is ClassB
Fatal error: Argument 1 passed to MyClass::test() must be an instance of 
ClassB, called in typeHintTest.php on line 14 and defined in typeHintTest.php 
on line 4

Actual result:
--
Fatal error: Declaration of MyClass::test() must be compatible with that of 
MyInterface::test() in typeHintTest.php on line 3






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


Bug #37854 [Com]: Type Hinting with derived classes and interfaces not working

2012-04-20 Thread kabanovdmitry at gmail dot com
Edit report at https://bugs.php.net/bug.php?id=37854&edit=1

 ID: 37854
 Comment by: kabanovdmitry at gmail dot com
 Reported by:spam at codeword dot net
 Summary:Type Hinting with derived classes and interfaces not
 working
 Status: Not a bug
 Type:   Bug
 Package:Class/Object related
 Operating System:   *
 PHP Version:*
 Block user comment: N
 Private report: N

 New Comment:

Why then does PHP allow to narrow argument's type in subclass which extends 
base 
class?

This seems odd, because this violates Liskov Substitution Principle.


Previous Comments:

[2006-06-19 22:21:23] he...@php.net

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

First we don't allow changesin the typhints in derived classes/implementing 
classes. Second you need to learn inheritance rules again. Your code would 
break is-a relation.


[2006-06-19 22:11:34] spam at codeword dot net

Description:

When adding type hinting to an interface then implementing that interface using 
a derived class, the script compiler does not seem to recognise that the 
implemented type hint is derived from the interfaces type hint.  I hope that 
makes sense.  The code below may be more clear.

Reproduce code:
---
x;
  }
}
class ClassA {public$x = "Class is ClassA";  }
class ClassB extends ClassA{  public $x = "Class is ClassB";}
$myclass = new MyClass;
$a = new ClassA;
$b = new ClassB;
$myclass->test($b);
$myclass->test($a);
?>

Expected result:

Class is ClassB
Fatal error: Argument 1 passed to MyClass::test() must be an instance of 
ClassB, called in typeHintTest.php on line 14 and defined in typeHintTest.php 
on line 4

Actual result:
--
Fatal error: Declaration of MyClass::test() must be compatible with that of 
MyInterface::test() in typeHintTest.php on line 3






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