diff --git a/src/args.rs b/src/args.rs index b275075e52..4ac5ab9f20 100644 --- a/src/args.rs +++ b/src/args.rs @@ -168,6 +168,7 @@ impl<'a> Arg<'a> { ) .ok_or(Error::InvalidCString)?, default_value: match &self.default_value { + Some(val) if val.as_str() == "None" => CString::new("null")?.into_raw(), Some(val) => CString::new(val.as_str())?.into_raw(), None => ptr::null(), }, diff --git a/tests/src/integration/defaults/defaults.php b/tests/src/integration/defaults/defaults.php index 13e050c249..bc711a3f84 100644 --- a/tests/src/integration/defaults/defaults.php +++ b/tests/src/integration/defaults/defaults.php @@ -4,3 +4,6 @@ assert(test_defaults_integer(12) === 12); assert(test_defaults_nullable_string() === null); assert(test_defaults_nullable_string('test') === 'test'); +assert(test_defaults_multiple_option_arguments() === 'Default'); +assert(test_defaults_multiple_option_arguments(a: 'a') === 'a'); +assert(test_defaults_multiple_option_arguments(b: 'b') === 'b'); diff --git a/tests/src/integration/defaults/mod.rs b/tests/src/integration/defaults/mod.rs index c1ecf53212..03ab1a7309 100644 --- a/tests/src/integration/defaults/mod.rs +++ b/tests/src/integration/defaults/mod.rs @@ -12,10 +12,20 @@ pub fn test_defaults_nullable_string(a: Option) -> Option { a } +#[php_function] +#[php(defaults(a = None, b = None))] +pub fn test_defaults_multiple_option_arguments( + a: Option, + b: Option, +) -> PhpResult { + Ok(a.or(b).unwrap_or_else(|| "Default".to_string())) +} + pub fn build_module(builder: ModuleBuilder) -> ModuleBuilder { builder .function(wrap_function!(test_defaults_integer)) .function(wrap_function!(test_defaults_nullable_string)) + .function(wrap_function!(test_defaults_multiple_option_arguments)) } #[cfg(test)]