Třída pro příčetný casting?
- David Grudl
- Nette Core | 8227
Chybí mi, že v PHP není k dispozici příčetné
přetypování. Operátory jako (string)
, (int)
,
(bool)
přetypují natvrdo bez jakékoliv chybové hlášky. Jsou
proto zdrojem chyb a člověk je musí používat velmi opatrně.
Implicitní přetypování, které používá PHP při předávání hodnot
do parametrů funkcí nebo properties, funguje daleko lépe. Například do
funkce očekávající int lze předat float, ale jen pokud je celočíselný,
atd. Jenže tahle vlastnost se týká jen kódu, který nepoužívá
declare(strict_types=1)
, takže s ním má málokdo od Nette
zkušenost.
Zajímalo by mě, jestli by bylo užitečné přidat třídu Cast
,
která by takové příčetné přetypování prováděla. Měla by fungovat
vlastně stejně jako to nativní implicitní přetypování v PHP, jen
s dvěma drobnými rozdíly: Cast::string(false)
by vracelo
'0'
místo ''
a dále Cast::string(1.0)
by vracelo '1.0'
místo '1'
. Chování PHP v těchto
dvou případech mi připadá vyloženě jako zdroj chyb.
- mystik
- Člen | 312
Nedavno sem marne hledal jestli neco presne takoveho neexistuje. Nejbliz tomu co sem nasel bylo https://github.com/…ailing/types ale to je pro vetsinu use cases az zbytecne komplexni.
- m.brecher
- Generous Backer | 871
Ano, přetypování v PHP je navrženo špatně, mě třeba vadí nesmyslné přetypování hodnoty null:
(int) null // přetypuje na 0
(string) null // přetypuje na ''
Hodnota null musí v jakémkoliv přetypování zůstat null. Jednoduché přetypování respektující null jsem si udělal, ale ideální je to mít ve frameworku.