diff --git a/src/Encoder/ObjectEncoder.php b/src/Encoder/ObjectEncoder.php
index 995ebe5..81bc5df 100644
--- a/src/Encoder/ObjectEncoder.php
+++ b/src/Encoder/ObjectEncoder.php
@@ -103,7 +103,7 @@ static function (string $normalizePropertyName, Property $property) use ($object
$iso = $objectAccess->isos[$normalizePropertyName];
return match(true) {
- $isAttribute => $value ? (new AttributeBuilder(
+ $isAttribute => $value !== null ? (new AttributeBuilder(
$type,
$iso->to($value)
))(...) : $defaultAction,
diff --git a/src/Normalizer/PhpPropertyNameNormalizer.php b/src/Normalizer/PhpPropertyNameNormalizer.php
index 59ff625..341da3b 100644
--- a/src/Normalizer/PhpPropertyNameNormalizer.php
+++ b/src/Normalizer/PhpPropertyNameNormalizer.php
@@ -10,6 +10,7 @@
use function count;
use function preg_split;
use function Psl\Type\non_empty_string;
+use function ucfirst;
final class PhpPropertyNameNormalizer
{
@@ -29,7 +30,7 @@ private static function camelCase(string $word, string $regexp):string
}
$keepUnchanged = array_shift($parts);
- $parts = array_map(\ucfirst(...), $parts);
+ $parts = array_map(ucfirst(...), $parts);
array_unshift($parts, $keepUnchanged);
return non_empty_string()->assert(
diff --git a/tests/Unit/Encoder/ObjectEncoderTest.php b/tests/Unit/Encoder/ObjectEncoderTest.php
index 6e2a96a..b6f9fc3 100644
--- a/tests/Unit/Encoder/ObjectEncoderTest.php
+++ b/tests/Unit/Encoder/ObjectEncoderTest.php
@@ -109,6 +109,23 @@ public static function provideIsomorphicCases(): iterable
'xml' => 'green',
'data' => new User(active: true, hat: new Hat('green')),
];
+ yield 'with-falsy-attribute' => [
+ ...$baseConfig,
+ 'context' => self::createContext($xsdType, self::buildTypes(activeAsAttribute: true)),
+ 'xml' => 'green',
+ 'data' => (object)[
+ 'active' => false,
+ 'hat' => (object)[
+ 'color' => 'green',
+ ],
+ ],
+ ];
+ yield 'class-objects-with-falsy-attribute' => [
+ 'encoder' => new ObjectEncoder(User::class),
+ 'context' => $withClassMap(self::createContext($xsdType, self::buildTypes(activeAsAttribute: true))),
+ 'xml' => 'green',
+ 'data' => new User(active: false, hat: new Hat('green')),
+ ];
yield 'wsdl-example-objects' => [
...$baseConfig,