#42520 [Ver]: Type hinting: function still gets called if type mismatch occurs
| From: | konstantin at boyandin dot com | Date: | Mon, 03 Sep 2007 09:09:55 +0000 |
| Subject: | #42520 [Ver]: Type hinting: function still gets called if type mismatch occurs | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969378000@lists.php.net to get a copy of this message | ||
ID: 42520
User updated by: konstantin at boyandin dot com
Reported By: konstantin at boyandin dot com
Status: Verified
Bug Type: Documentation problem
Operating System: Windows XP
PHP Version: Irrelevant
New Comment:
I was using the Windows binary PHP 5.2.4 distribution.
Note: xdebug was installed when I found that behavior (no explicit
options for it set in php.ini). I will try the situation without xdebug
but with error handler set/unset.
Previous Comments:
------------------------------------------------------------------------
[2007-09-03 08:20:51] bjori@php.net
bjori@lindsay:~$ php
<?php
function err($errno, $errstr) {
echo $errstr, "\n";
}
set_error_handler("err");
function typeHint(array $foo) {
echo "I am inside the type hint with :", gettype($foo), "\n";
}
typeHint("string");
Argument 1 passed to typeHint() must be an array, string given, called
in /home/bjori/- on line 10 and defined
I am inside the type hint with :string
------------------------------------------------------------------------
[2007-09-03 08:14:12] bjori@php.net
his example is missing the custom error handler catching the
E_RECOVERABLE_ERROR.
------------------------------------------------------------------------
[2007-09-03 08:03:16] rquadling@php.net
I'm only seeing the error, no output using PHP 5.2.4RC4-dev.
What version are you using that shows the 'A' or 'B' as well as the
error message?
------------------------------------------------------------------------
[2007-09-02 14:24:01] konstantin at boyandin dot com
Description:
------------
Function with type hinting is executed nonetheless, even if type
mismatch exception occurs.
Reproduce code:
---------------
<?php
$a = new B();
test($a);
class A {
public $name = 'A';
public function show() {
print($this->name);
}
}
class B {
public $name = 'B';
public function show() {
print($this->name);
}
}
function test(A $obj) {
$obj->show();
}
?>
Expected result:
----------------
Fatal error, nothing displayed 9save error info if output to the
browsers)
Actual result:
--------------
Function is called as if required type was correct *and* fatal error is
generated.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42520&edit=1