Type Hints with Null
| From: | Derick Rethans | Date: | Fri, 07 Oct 2005 20:29:51 +0000 |
| Subject: | Type Hints with Null | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-19482@lists.php.net to get a copy of this message | ||
Hello,
attached is a patch (by Markus) that allows you to make typehints
optionally take NULL as default value too, f.e.:
class P { }
class T {
function f(P $p = NULL) {
var_dump($p);
}
}
$o=new T();
$o->f(new P);
$o->f(NULL);
$o->f();
I would like to commit this patch to HEAD pending any objections.
regards,
Derick
--
Derick Rethans
http://derickrethans.nl | http://ez.no | http://xdebug.org
Index: Zend/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.665 diff -u -p -d -r1.665 zend_compile.c --- Zend/zend_compile.c 3 Oct 2005 08:21:15 -0000 1.665 +++ Zend/zend_compile.c 6 Oct 2005 18:21:02 -0000 @@ -1324,7 +1324,7 @@ void zend_do_receive_arg(zend_uchar op, cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0; } - cur_arg_info->allow_null = 0; + cur_arg_info->allow_null = (op == ZEND_RECV_INIT && (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL")))) ? 1 : 0; } else { cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0;
Index: Zend/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.665 diff -u -p -d -r1.665 zend_compile.c --- Zend/zend_compile.c 3 Oct 2005 08:21:15 -0000 1.665 +++ Zend/zend_compile.c 6 Oct 2005 18:21:02 -0000 @@ -1324,7 +1324,7 @@ void zend_do_receive_arg(zend_uchar op, cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0; } - cur_arg_info->allow_null = 0; + cur_arg_info->allow_null = (op == ZEND_RECV_INIT && (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL")))) ? 1 : 0; } else { cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0;