In dit geval, omdat je $datetime wilt undefinen als het een lege string is, zou ik voor ?: gaan; gebruik je ?? dan gebeurt er exact niets.
$datetime = $datetime ?? NULL;
# is hetzelfde als
if (isset($datetime)) {
# $datetime bestaat en is niet null
$datetime = $datetime;
}
else {
# $datetime is null of bestaat niet
$datetime = NULL;
}
Oftewel: na de if-then-else heeft $datetime dezelfde waarde als ervoor.
Gebruik je ?: dan krijg je iets andere code:
$datetime = $datetime ?: NULL;
# is hetzelfde als
if ($datetime) {
# $datetime heeft een truthy-waarde
$datetime = $datetime;
}
else {
# $datetime heeft een falsy-waarde
$datetime = NULL;
}
Die check is iets losser dan isset(), want als truthy wordt alles gezien dat niet undefined/null, een lege string, het cijfer 0, de string '0', de boolean-waarde false of een lege array is.
Als het je er puur om gaat een lege string om te zetten naar null, dan zou ik voor de constructie van Ariën gaan:
$datetime = $datetime === '' ? null : $datetime;
Dat is misschien wat meer tikwerk, maar het geeft wel expliciet aan wat je aan het doen bent, en daar heb je wellicht nog een hoop plezier van als je over drie jaar je script zit te debuggen. ;-)