Autor Zpráva
Bertram
Profil
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0