Type hints revisited [IllegalArgumentException instead of E_ERROR]
| From: | Timm Friebe | Date: | Thu, 27 Mar 2003 16:16:04 +0000 |
| Subject: | Type hints revisited [IllegalArgumentException instead of E_ERROR] | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-368@lists.php.net to get a copy of this message | ||
I've implemented an additional feature for type hints that will throw an
exception instead of bailing out in case an incorrect type is passed.
Test script:
<?php
class Date { }
class Article {
public function setCreated_at(Date $date) {
echo __CLASS__, '::', __FUNCTION__, ' called with ';
var_export($date);
echo "\n";
}
public function setLastchange([Date] $date) {
echo __CLASS__, '::', __FUNCTION__, ' called with ';
var_export($date);
echo "\n";
}
}
$a= new Article();
$a->setLastchange(new Date());
$a->setLastchange(NULL); // Passes
$a->setCreated_at(new Date());
try {
$a->setCreated_at(NULL); // Fails
} catch (IllegalArgumentException $e) {
echo "Caught: "; var_dump($e);
}
$a->setCreated_at(1); // Fails
echo "Alive"; // Will not show up
?>
Output:
---------------------------------------------------------------------
thekid@friebes:~/devel/php > ./php5/sapi/cli/php hints.php
article::setlastchange called with class date {
}
article::setlastchange called with NULL
article::setcreated_at called with class date {
}
Caught: object(illegalargumentexception)#2 (3) {
["message"]=>
string(38) "Argument 1 must be an instance of date"
["file"]=>
string(36) "/usr/home/thekid/devel/php/hints.php"
["line"]=>
int(4)
}
Fatal error: Uncaught exception! in Unknown on line 0
---------------------------------------------------------------------
A unified diff is attached.
- Timm
Attachment: [text/x-patch] zend_hints.diff
Attachment: [text/x-patch] zend_hints.diff