Autor | Zpráva | ||
---|---|---|---|
Bertram Profil |
#1 · Zasláno: 30. 11. 2011, 17:56:10 · Upravil/a: Bertram
Ahoj,
poraďte prosím, kde se dočtu, pokud možno v češtině, co který z těch zástupných symbolů ("\xE2", "\xDF"), nebo co to vlasně je znamená. Abych místo, $getter = 'get'.str_replace($name[0], strtoupper($name[0]), $name); mohl použít toto a přitom i věděl, co ty znaky vlastně znamenají. $name[0] = $name[0] & "\xDF"; $getter = 'get'.$name; Já vím, že by volání toho getteru prošlo i s malým písmenem, ale pořádek dělá přátele :) |
||
DJ Miky Profil |
#2 · Zasláno: 30. 11. 2011, 20:04:59 · Upravil/a: DJ Miky
Nejedná se o žádný speciální znak, důležitější jsou bity, které obsahuje. Pomocí nich se dá z malého ASCII písmena udělat velké, protože se hodnotou liší o 32, což je šestý bit. Např.:
'a' = ASCII kód desítkově 97 = dvojkově 0110 0001 'A' = ASCII kód desítkově 65 = dvojkově 0100 0001 šestnáctkově DF = dvojkově 1101 1111 Proto když "vymaskuješ" šestý bit, dostaneš z malého písmena velké: 0110 0001 (znak 'a') & 1101 1111 (0xDF) ----------- 0100 0001 (znak 'A') Pokud ti není jasné, co se zde děje, klíčové slovo pro Google a Wikipedii je bitový součin (AND). Pro ASCII kódy znaků můžeš taky navštívit Wikipedii. Mimochodem, $getter = 'get'.str_replace($name[0], strtoupper($name[0]), $name); toto nahradí všechny výskyty prvního písmena velkým písmenem, tedy např. z názvu "totonebudefungovatdobre" udělá "ToTonebudefungovaTdobre". |
||
Bertram Profil |
#3 · Zasláno: 30. 11. 2011, 20:35:12 · Upravil/a: Bertram
DJ Miky:
Děkuji za vyčerpávající odpověď, ta tvoje je doslova ukázková :) K tomu geteru se to má tak, že ho skládám uvnitř magické metody __get(), která bere $name jako parametr. Takže zatím takto: public function __get($name) { $getter = 'get'.str_replace($name[0], strtoupper($name[0]), $name); if (method_exists($this, $getter)) { return call_user_func(array($this, $getter)); } elseif (array_key_exists($name, $this->params)) { return $this->params[$name]; } else { if (property_exists($this, $name)) { // TODO reflexe ? private : protected throw new Exception("<span style='color: red;'>nedostatečné oprávnění pro získání vlastnosti: <strong style='color: black; font:italic;'>'$name'</strong>.</span>"); } else { throw new Exception("<span style='color: red;'>neznámá vlastnost: <strong style='color: black; font:italic;'>'$name'</strong>.</span>"); } } } edit: To skládání getteru bylo opravdu špatné, prvotně jsem vymýšlel něco takového: $getter = 'get'.substr_replace($name, strtoupper($name[0]),0,1); Až jsem vymyslel zvětšovač prvního znaku v celém řetězci :) Takže ještě jednou dík. |
||
Časová prodleva: 12 let
|
0