|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2007-09-02 14:24 UTC] 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.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 20 09:00:02 2025 UTC |
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 :stringI have revised the reproducible code in accordance with the advice given. Now it demonstrates that the function is called in pure PHP 5.2.4 installation. <?php set_error_handler("report_error"); $a = new B(); test($a); class A { public function show() { print('Class A used'); } } class B { public function show() { print('Class B used'); } } function test(A $obj) { $obj->show(); } function report_error($errno, $errstr) { echo "PHP error $errstr<br />"; } ?>