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í:

  1. Definice tříd musí končit }, středník je nadbytečný a způsobí vykonání prázdného příkazu.
  2. Pokud třída definuje vlastní metodu pro klonování, je volaná při použití standardního operátoru clone.
  3. 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.
  4. Objekty je možné iterovat stejně jako pole, v PHP 5 je možné navíc chování při iteraci ovlivnit.
  5. Potomkům tříd je umožněno pracovat pouze s protected a public vlastnostmi a metodami.
  6. Hlavičku Content-Type stejně jako všechny ostatní posílá funkce header.
  7. func_get_args se volá přímo z funkce a nepřijímá tedy žádné parametry.
  8. Funkce array_shift vyjme prvek ze začátku pole, takže prvky se sice posunou, ale směrem k začátku pole.
  9. Byť pro „funkci“ delete existuje v manuálu záznam, soubor smaže unlink.
  10. Funkce pcntl_exec a exec přijímají odlišné parametry.
  11. 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.
  12. Bráška chr je ord.
  13. md5 stejně jako všechny hashovací funkce vrátí na stejný vstup vždy stejný výstup.
  14. Kromě get_magic_quotes_gpc je k dispozici také funkce get_magic_quotes_runtime, ale tu obvykle volat nepotřebujeme.
  15. get_required_files je alias pro get_included_files, narozdíl od require a include.
  16. ksort vrací boolean.
  17. array_unique ponechá parametr nedotčený a výsledné pole vrátí.
  18. Selský rozum napovídá, že komprese zatěžuje procesor a šetří linky.
  19. PHP kód uvnitř definice třídy přerušit lze, ale není možné vložit jiný soubor.
  20. Kód je bez chyb, prázdná instrukce na 6. řádku ničemu nevadí.
  21. Výjimky jsou k dispozici až od PHP 5, pro přenositelnost se tedy moc nehodí.
  22. Funkci assert povoluje assert.active.
  23. Jak už bylo řečeno, PHP 4 nemá výjimky.
  24. Řetězec porovnávaný s číslem se vždy převede na číslo.
  25. === je operátor identity, která porovnává hodnotu i typ.
  26. … a !== je pro změnu operátor neidentity.
  27. Číslo začínající na 0x je hexadecimální, na samotnou nulu potom osmičkové.
  28. … takže 8 > 10.
  29. Příklad na prioritu operátorů mohl být určitě těžší.
  30. WHERE se píše před ORDER BY.
  31. O typech join, index ani cache nic nevím, takže nejlépe vychází int.
  32. SQLite je skutečně přímo zakompilované do PHP 5.
  33. Při volání mysql_connect bez parametrů ji ani není nutné volat.
  34. 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.
  35. Znaky v řetězci se podobně jako prvky pole indexují od nuly.
  36. Porovnání nezávislé na velikosti znaků zajistí strcasecmp, ale kdybyste chtěli pozici case-insensitive podřetězce, použijte stripos.
  37. 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ů.
  38. Funkce parse_str se dá použít např. pro načtení proměnných v dokumentech obsluhovaných direktivou ErrorDocument.
  39. 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?
  40. Uvedený kód nehospodárně vymění čárky za tečky.

Které otázky byly podle vás nejtěžší, ve kterých jste chybovali?

Jakub Vrána, Ze zákulisí, 14.12.2005, diskuse: 2 (nové: 0)

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.

ikona dgx:

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.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.