asterisk
Sausis 22, 2008

PHP klausimai #9

Atsakymai į šiuos klausimus bus publikuoti ketvirtadienį. Taip pat šiuo metu vyksta atsakymų į PHP klausimus konkursas, kurio metu geriausiai ir greičiausiai atsakiusieji bus apdovanoti.
Dalyvių rezultatai:

  1. tygas - 7.2
  2. Braunikas - 7
  3. Armandas - 6.2
  4. slibinas - 6.1


PHP #9:

  1. Tarkime turime tokį masyvą:
    $array = array(1,1,'labas',3,4,4,5,'poryt',6,6,6,'poryt',2,2,2);

    Koks greičiausias būdas suskaičiuoti tam tikros reikšmės skaičių masyve?
    Galimi atsakymo variantai:

    • funkcija array_total_values
    • funkcija array_count_values
    • ciklas foreach
    • funkcija count
    • ciklas for
  2. Kuris iš žemiau pateiktų būdų yra geriausias atskirti eilutei (string) pagal “_-_” šabloną? Galimi atsakymai:
    1. str_split($string, strpos($string, "_-_"))
    2. preg_split("_-_", $string);
    3. explode("_-_", $string);
    4. Visi būdai geri
  3. Kokiu, jūsų nuomone, geriausiu/paprasčiausiu būdu galima šią eilutę (string):
    $string = "a=10&b[]=20&c=30&d=40+50";

    paversti į tokį masyvą:

    array(4) {
      ["a"]=>
      string(2) "10"
      ["b"]=>
      array(1) {
        [0]=>
        string(2) "20"
      }
      ["c"]=>
      string(2) "30"
      ["d"]=>
      string(5) "40 50"
    }
  4. Koks rezultatas bus išvestas įvykdžius šį skriptą?
    <?php
    function 1dotEach($n)
    {
      if ($n > 0)
      {
        1dotEach(--$n);
        echo ".";
      }else 
      {
        return $n;
      }
    }
    1dotEach(4);
    ?>
  5. Kokio “pattern” pavyzdys yra čia pateiktas kodas?
    <?php
     
    class MyClassBuilder {
     
      public function build() {
        return new MyClass();
      }
     
    }
     
    ?>
  6. Koks skirtumas tarp paprasto ir ’static’ metodų ?
  7. Kas neteisinga su šiuo kodu remiantis PHP 5 standartais, tačiau yra teisinga PHP 4?
    <?php
    class MyClass {
      function reassign($var) {
        $this = $var;
      }
    }
     
    $a = new MyClass();
    $b = new MyClass();
    $a->reassign($b);
     
    ?>
  8. Kokius XML “parsing” metodus palaiko PHP 5?
  9. Kokių “super global” kintamųjų turinys yra $_REQUEST?
  10. Ką privaloma atlikti norint apsisaugoti nuo SQL injekcijų?

Panašūs straipsniai


“PHP klausimai #9” komentarų: 2

  1. neworld

    1. array_count_values()
    2. 3
    3. parse_str($string);
    4. “….”
    5.
    6. static metodų negalima pasiekti per $this, tačiau galima pasiekti per $self, arba per $parent. Taip pat šie metodai negali būti pasiekti naudojant -> operatorių.
    7.
    8. xml_set_element_handler()
    xml_set_character_data_handler()
    xml_set_processing_instruction_handler()
    xml_set_default_handler()
    xml_set_unparsed_entity_decl_handler()
    xml_set_notation_decl_handler()
    xml_set_external_entity_ref_handler()

    9. visi $_POST, $_GET, $_SESSION kintamieji
    10. Būtina visus vartotojų duomenis filtruoti nuo kabučių, kad ir su funkcija addslashes($text); (http://lt.php.net/addslashes)

  2. slibinas

    1. ats.: foreach
    array_total_values - tokios fukncijos berods visai nera
    array_count_values - uzduoti atlieka, bet skaiciuos VISU reiksmiu pasikartojima (neoptimalu, ypac jei masyvas didelis)
    count - masyvo elemento skaicius
    for - netinka iteruoti asociatyviam masyvui

    2. ats.: explode
    str_split - skaldys i fiksuoto dydzio gabalus
    preg_split - skaldys pagal “-”, nes “_-_” bus suprastas kaip “/-/”

    3. parse_str($string, $array);
    var_dump($array);

    4. “….” (4 taskai)

    5. builder

    6. static metoda galima iskviesti nesukurus tos klases objekto.
    Klase::metodas();

    7. $this = $var;

    9. $_POST, $_GET ir $_COOKIE;

    10. jei neijungtas magic_qoutes, reikia user inputui ivykdyt addslashes() pries rasant i db. Galima ir kitaip escape’int kabutes. Pvz.:
    // $string - user input’as
    if (get_magic_quotes_gpc()) $string = stripslashes($string);
    $string = htmlspecialchars($string, ENT_QUOTES);
    $string = addslashes($string);
    Taip nusausim 2 zuikius, pasisaugosim nuo sql injection’u ir nuo nepageidaujamo html/js kodo ivykdymo.