googleapis / googleapis/google-api-php-client-services

Proper PHPDoc for nullable class properties and method returns

Open
#604 2 comments 0 reactions 0 assignees View on GitHub
type: feature request
Dominant language
PHP
Stars
1.3k
Forks
320
Avg merge
2h 32m
Merged PRs (30d)
193

Description

Related / follow-up of https://github.com/googleapis/google-api-php-client-services/issues/172
**Is your feature request related to a problem? Please describe.**
Currently some classes have properties that

- can be NULL
- have PHPDoc which suggests it can not be NULL

For example:
https://github.com/googleapis/google-api-php-client-services/blob/dbd60410b289374a44fe91f3556d463b55c10246/src/Calendar/EventDateTime.php#L23-L25

And https://github.com/googleapis/google-api-php-client-services/blob/dbd60410b289374a44fe91f3556d463b55c10246/src/Calendar/EventDateTime.php#L42-L48

When using static analysis using (for example) PHPStan, on code like this:

```php
//All-day event has the date property set
if (is_string( $calendarEvent->getStart()->date)) {
//Process all-day event
}
} elseif (is_string( $calendarEvent->getStart()->dateTime)) {
//event is not all-day-even
}
```
This will result in an error like:

```php
Elseif branch is unreachable because previous condition is always true.
```

**Describe the solution you'd like**
It would be better to use PHPDoc to indicate that the property can be null, for example

```php
/**
* @var string|null
*/
public $date;

/**
* @return string|null
*/
public function getDate()
{
return $this->date;
}
```
**Describe alternatives you've considered**
For PHP versions that support typed properties and return types, the PHPDoc can be omitted:

```php
public ?string $date = null;
public function getDate() : ?string
{
return $this->date;
}
```

But this library supports PHP `>=5.6`, so this is probably not an option yet: https://github.com/googleapis/google-api-php-client-services/blob/main/composer.json#L9

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.