From aa9ea598516fab375d3307cb0c7f6a6559940ed4 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 15 Nov 2005 15:59:49 +0000 Subject: [PATCH] - Allow "= null" default for parameters with a class type-hint. --- NEWS | 1 + Zend/zend_compile.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 565b22fcf6..33116db066 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Nov 2005, PHP 5.1 - Allow recursive calls to __get/__set for different properties. (Dmitry) +- Allow "= null" default for parameters with a class type-hint. (Derick) - Upgraded PEAR to version 1.4.4. (Greg) - Fixed bug in mysqli extension with unsigned int(11) being represented as signed integer in PHP instead of string in 32bit systems. (Andrey) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index decfaa7b24..c10f694ee1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1273,15 +1273,23 @@ void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initia cur_arg_info->pass_by_reference = pass_by_reference; if (class_type->op_type != IS_UNUSED) { + cur_arg_info->allow_null = 0; if (class_type->u.constant.type == IS_STRING) { cur_arg_info->class_name = class_type->u.constant.value.str.val; cur_arg_info->class_name_len = class_type->u.constant.value.str.len; + + if (op == ZEND_RECV_INIT) { + if (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL"))) { + cur_arg_info->allow_null = 1; + } else { + zend_error(E_COMPILE_ERROR, "Default value for parameters with a class type hint can only be NULL"); + } + } } else { cur_arg_info->array_type_hint = 1; cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0; } - cur_arg_info->allow_null = 0; } else { cur_arg_info->class_name = NULL; cur_arg_info->class_name_len = 0; -- 2.40.0