forked from apoloz/alfa-bank-sdk
55 lines
1.6 KiB
Markdown
55 lines
1.6 KiB
Markdown
---
|
|
title: Default values
|
|
weight: 8
|
|
---
|
|
|
|
There are a few ways to define default values for a data object. Since a data object is just a regular PHP class, you can use the constructor to set default values:
|
|
|
|
```php
|
|
class SongData extends Data
|
|
{
|
|
public function __construct(
|
|
public string $title = 'Never Gonna Give You Up',
|
|
public string $artist = 'Rick Astley',
|
|
) {
|
|
}
|
|
}
|
|
```
|
|
|
|
This works for simple types like strings, integers, floats, booleans, enums and arrays. But what if you want to set a default value for a more complex type like a `CarbonImmutable` object? You can use the constructor to do this:
|
|
|
|
```php
|
|
class SongData extends Data
|
|
{
|
|
#[Date]
|
|
public CarbonImmutable|Optional $date;
|
|
|
|
public function __construct(
|
|
public string $title = 'Never Gonna Give You Up',
|
|
public string $artist = 'Rick Astley',
|
|
) {
|
|
$this->date = CarbonImmutable::create(1987, 7, 27);
|
|
}
|
|
}
|
|
```
|
|
|
|
You can now do the following:
|
|
|
|
```php
|
|
SongData::from();
|
|
SongData::from(['title' => 'Giving Up On Love', 'date' => CarbonImmutable::create(1988, 4, 15)]);
|
|
```
|
|
|
|
Even validation will work:
|
|
|
|
```php
|
|
SongData::validateAndCreate();
|
|
SongData::validateAndCreate(['title' => 'Giving Up On Love', 'date' => CarbonImmutable::create(1988, 4, 15)]);
|
|
```
|
|
|
|
There are a few conditions for this approach:
|
|
|
|
- You must always use a sole property, a property within the constructor definition won't work
|
|
- The optional type is technically not required, but it's a good idea to use it otherwise the validation won't work
|
|
- Validation won't be performed on the default value, so make sure it is valid
|