Přetypování na Int rubrika: Programování: PHP
9
Taco
položil/-a 9.5.2018
upravil/-a 9.5.2018
Mám hodnoty: 42 (číslo), "Lorem ipsum" (text), [1, 2, 3] (list), {"name" => "John", "surname" => "Dee"} (dict).
A k těm hodnotám potřebuju přibalit nějaký metadata. Zároveň by se mi ale hodilo, aby mi ty metadata nepřekážela. Aby číslo bylo číslem, float floatem, text textem, bool booleanem.
U slovníku a seznamu je to celkem v pohodě. Vytvořím si spešl objekt implementující ArrayAccess. V případě textu by se dalo ošéfovat metodou __toString(). Jak to ale udělat s těmi čísly?
Představoval bych si fungování nějak následovně:
$limit = make(42, ["mark" => "foo"]); dump($limit->meta); dump(substr($s, 0, $limit)); // nebo jakákoliv jiná funkce přijímající číslo.
Díky za nápady.
odkaz
12
Kit
odpověděl/-a 10.5.2018
upravil/-a 10.5.2018
Zabal ty hodnoty do objektů a zapouzdři k nim i metadata a potřebné metody.
$limit = new Limit(42, ["mark" => "foo"]); dump($limit->meta); dump($limit->normalize($s));
Komentáře
- Taco : Hmm, co na takovouhle odpověď říct, že. — 10.5.2018
- maryo : Že to pravděpodoně jinak nejde? :-). Buď mít objekt co obsahuje i metadata (ať už se jmenuje jakkoliv obecně, třeba Value) a pak pracovat s ním pomocí metod nebo předávat metadata zvlášť nebo mít nějakej registr metadat a předávat si ten, ale jestli ty scalar hodnoty nejdou použít jako klíč (má to identitu i na základě těch metadat resp. metadat pro "stejný číslo" může být najednou víc), tak nejde ani to. Leda při získávání hodnoty přetypovat nejdřív na string a pak na int, ale to je dost divný a navíc je to v principu to samý, jen se k tý hodnotě jinak přistupuje. Nebo teda OK, Kit jí možná navrhuje úplně zapouzdřit, ale tak to už záleží na kontextu k čemu to slouží. Ale taky by se mi občas něco podobnýho hodilo, škoda, že scalar typy nejsou objekty a tudíž je nejde nijak rozšiřovat/dekorovat. — 11.5.2018
- Taco : Tak v prvé řadě Kit nic zajímavého nenapsal, a nic užitečného neporadil. Tím bych to uzavřel. — 11.5.2018
- Kit : @Taco: Kritizovat umí každý. Dělej si to jak chceš. — 11.5.2018
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře