Hudzilla PHP Exam – řešení
Školení, která pořádám
Pokud jste ještě nedělali Hudzilla PHP Exam, doporučuji si ho nejprve udělat. Toto je stručné vysvětlení správných odpovědí:
- Definice tříd musí končit
}
, středník je nadbytečný a způsobí vykonání prázdného příkazu.
- Pokud třída definuje vlastní metodu pro klonování, je volaná při použití standardního operátoru clone.
- Třída je abstraktní, pokud obsahuje abstraktní metodu. Z takové třídy je možné pouze odvozovat potomky a objekt z nich jde vytvořit až tehdy, když je všem abstraktním metodám přiřazena nějaká funkčnost.
- Objekty je možné iterovat stejně jako pole, v PHP 5 je možné navíc chování při iteraci ovlivnit.
- Potomkům tříd je umožněno pracovat pouze s protected a public vlastnostmi a metodami.
- Hlavičku
Content-Type
stejně jako všechny ostatní posílá funkce header.
- func_get_args se volá přímo z funkce a nepřijímá tedy žádné parametry.
- Funkce array_shift vyjme prvek ze začátku pole, takže prvky se sice posunou, ale směrem k začátku pole.
- Byť pro „funkci“ delete existuje v manuálu záznam, soubor smaže unlink.
- Funkce pcntl_exec a exec přijímají odlišné parametry.
- sha1 vrací 40 hexadecimálních znaků nebo 20 binárních (při nastavení druhého parametru), na rozdíl od md5, která vrací 32 resp. 16.
- Bráška chr je ord.
- md5 stejně jako všechny hashovací funkce vrátí na stejný vstup vždy stejný výstup.
- Kromě get_magic_quotes_gpc je k dispozici také funkce get_magic_quotes_runtime, ale tu obvykle volat nepotřebujeme.
- get_required_files je alias pro get_included_files, narozdíl od require a include.
- ksort vrací boolean.
- array_unique ponechá parametr nedotčený a výsledné pole vrátí.
- Selský rozum napovídá, že komprese zatěžuje procesor a šetří linky.
- PHP kód uvnitř definice třídy přerušit lze, ale není možné vložit jiný soubor.
- Kód je bez chyb, prázdná instrukce na 6. řádku ničemu nevadí.
- Výjimky jsou k dispozici až od PHP 5, pro přenositelnost se tedy moc nehodí.
- Funkci assert povoluje assert.active.
- Jak už bylo řečeno, PHP 4 nemá výjimky.
- Řetězec porovnávaný s číslem se vždy převede na číslo.
- === je operátor identity, která porovnává hodnotu i typ.
- … a !== je pro změnu operátor neidentity.
- Číslo začínající na
0x
je hexadecimální, na samotnou nulu potom osmičkové.
- … takže 8 > 10.
- Příklad na prioritu operátorů mohl být určitě těžší.
WHERE
se píše před ORDER BY
.
- O typech join, index ani cache nic nevím, takže nejlépe vychází int.
- SQLite je skutečně přímo zakompilované do PHP 5.
- Při volání mysql_connect bez parametrů ji ani není nutné volat.
- V dobře navržené databázi by se data neměla opakovat, čemuž se říká normalizace. Samozřejmě je vhodné použít i správné datové typy a indexovat data.
- Znaky v řetězci se podobně jako prvky pole indexují od nuly.
- Porovnání nezávislé na velikosti znaků zajistí strcasecmp, ale kdybyste chtěli pozici case-insensitive podřetězce, použijte stripos.
- Funkce trim může přijímat jeden nebo dva parametry, ale otázka zjevně míří na maximální počet přijímaných parametrů.
- Funkce parse_str se dá použít např. pro načtení proměnných v dokumentech obsluhovaných direktivou ErrorDocument.
- Kromě libovolného nealfanumerického znaku lze jako oddělovač v Perl-kompatibilních regulárních výrazech sice použít i dvojice
()
, {}
, []
nebo <>
, ale i tak volání funkce skončí chybou Unknown modifier '*'
. Doplňující otázka: Co by se stalo, kdyby *
ve výrazu chyběla?
- Uvedený kód nehospodárně vymění čárky za tečky.
Které otázky byly podle vás nejtěžší, ve kterých jste chybovali?
Diskuse
honza:
To je opravdu test...zkouset me z manualu :)
Ale tenhle test mi ukazal jedine. Ze mam proslapanou cesticku ke svemu stylu programovani v PHP a ze nektere veci proste nevim ze existuji. Viz otazka cislo 19 (to by me v zivote nenapadlo) a napriklad otazka 10 - zatim jsem nebyl nucen toto pouzit.
Ona zrovna ta otazka 19 je zavádějící, protože doslova uvnitř definice třídy lze vložit jiný soubor:
<?php
//začátek definice třídy
class Trida {
function Abc() {
//vkladame soubor
require script.php
}
}
// konec definice třídy
?>
To je slovíčkaření, co? :-)
Diskuse je zrušena z důvodu spamu.