Datový typ parametru funkce int|null

radekBrno
Člen | 61
+
0
-

Zdravím,

rozhodl jsem se dopsat datové typy k parametrům funkcí. V presenteru mám následující funkci, do které posílám hodnotu null (přidání záznamu) a nebo int (editace). Když jako datový typ uvedu int, tak operace končí chybovou hláškou „Argument 1 passed to class@anonymous::create() must be of the type integer, null given“. Jak se to dá elegantně vyřešit? Díky za radu.

protected function createComponentCategoryAddEditForm(): CategoryAddEditForm
{
    $control = $this->categoryAddEditForm->create($this->categoryId);
    return $control;
}
Kamil Valenta
Člen | 762
+
-1
-
function f(int $arg = null) {
...
}

Nebo myslíš u returnu?

function f(): ?int {
    if(...) {
		return 1;
	} else {
        return null;
    }
}

Editoval kamil_v (13. 1. 2020 23:49)

Marek Bartoš
Nette Blogger | 1167
+
0
-

f(int $arg = null)

Typ sám o sobě nedovoluje zadat null. To že jde null zadat, když je současně výchozí hodnota, je historická záležitost, správně je f(?int $arg = null)

Editoval Mabar (14. 1. 2020 0:05)

h4kuna
Backer | 740
+
+3
-

Ono pokud si chceš vynutit parametr, tak ani výchozí hodnotu neudávej, jako že tam parametr vždy vyplňuješ. Ten otazník definuje že parametr je nullable.

create(?int categoryId)

Teď jen odhaduji. Ale pokud ten parametr je jen aby jsi vyplnil výchozí hodnoty pro formulář, tak si to můžeš udělat v presenteru v createComponent…, tím tu továrnu pro formulář očistíš a zůstane ti jen čisté vytvoření formuláře. Ale to je jen doporučení a detail, takže nechám na tvém vkusu.

Editoval h4kuna (14. 1. 2020 9:20)

radekBrno
Člen | 61
+
0
-

Díky moc, pomohlo.

Mabar napsal(a):

f(int $arg = null)

Typ sám o sobě nedovoluje zadat null. To že jde null zadat, když je současně výchozí hodnota, je historická záležitost, správně je f(?int $arg = null)