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.

Komentáře

  • Hobr : Asi nejjednodušší by byly ty objekty s __toString, kde u čísel by se muselo přetypovávat, např. dump(substr($s, 0, (int)(string)$limit)); 14.5.2018
  • Taco : No jo no, to mě napadlo. Ale je to ošklivé :-) 17.5.2018
  • kohven : OT: Mám-li hodnotu 42, tak si v první řadě musím dát pozor, abych věděl, kde mám ručník. A to především zítra. :) 24.5.2018
  • Taco : Mám :-) 25.5.2018
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:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.