Šiame straipsnyje rasite atsakymus į “PHP klausimai #7“.
1. Kaip nusiųsti parametrus į praplėstos klasės konstruktorių?
Teisingai pateiktą kodą užbaigė Žilvinas Sadauskas:

<?php
class klase1 
{
	public function __construct($parametras = NULL)
	{
		if ( !is_null($parametras) ) echo $parametras;
	}
} 
class klase2 extends klase1
{
	public function __construct($parametras = null) 
	{ 
		parent::__construct($parametras); 
	}
} 
$klase = new klase2('kažkas'); // Rezultatas turėtų būti atvaizduotas 'kažkas'.
?>

P.S. klausime taip pat trūko function tačiau kažkodėl niekas to nepastebėjo :)
2. Kam naudojamos “magic” funkcijos klasėse __sleep() ir __wakeup()?
“__sleep - ką daryti, kai objektas serialize’inamas, __wakeup - kai unserialize’inamas.” (c) Žilvinas Sadauskas
3. Ar galima ir jeigu taip, tai kaip padaryti, jog PHP sesijų naikinimui naudotų jūsų funkciją?
Šio klausimo neatsakė niekas, galbūt neteisingai suformulavau? Atsakymas - session_set_save_handler()
4. Kuo skiriasi printf() nuo fprintf()?
Eimantas ir Žilvinas Sadauskas abu atsakė teisingai. fprintf() vietoje to, jog išvestų į “stdout”, rašo į nurodytą resursą.
5. Kodėl geriau naudoti PCRE, o ne POSIX (kokie privalumai)? Arba atvirkščiai.
Sutinku su Žilvinu Sadausku, kad yra situacinė vertė. Tačiau, PCRE yra kur kas greitesnis ir kur kas lankstesnis. Taip pat POSIX nėra “binary-safe”.
6. Ar yra paprastesnis ir geresnis sprendimas pakeisti šį kodą:

<?php
$handle = fopen("http://www.example.com/", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
?>

Teisingas atsakymas:

<?php
$contents = file_get_contents("http://www.example.com");
?>

(c) Eimantas ir Žilvinas Sadauskas
7. Kodėl register_globals yra blogai?
register_globals yra blogai saugumo sumetimais. Teisingai atsakė Žilvinas Sadauskas.
8. Kuo skiriasi mysql_escape_string() nuo mysql_real_escape_string() (vietoje mysql gali būti kita duombazė)?
“mysql_real_escape_string() pakeičia “negerus” simbolius šešioliktainiu kodu, paprastas escape tik uždeda slashus.” (c) Žilvinas Sadauskas. Iš esmės teisus ir Eimantas.
9. Kokie geriausi būdai yra sukurti dokumentaciją savo kodui?
Mano ir Eimanto nuomonės sutampa - PHPDocumentor.
10. Kodėl šis sprendimas yra blogas?

$result = mysql_query("SELECT `smth` FROM `smwhr`");
while ($row = mysql_fetch_array($result))
{
print $row['smwhr'] . "<br>";
}

Laukiau šiek tiek konkretesnio atsakymo nei “Todėl, kad parašyta nesamonė” :)
Šiame skripte nėra užklausos klaidos patikrinimo (gali nutrūkti ryšys su duombaze ir pan.). Taigi, jeigu įvyksta klaida, skriptas su ne sustabdomas, o vykdomas toliau, tad gali iškilti kitos problemos, nes nėra jokių rezultatų iš duombazės.

Panašūs straipsniai


“PHP klausimai #7 (atsakymai)” komentarų: 3

  1. Armandas

    Dėl 10 klausimo galiu pasakyti tiek: nori konkretesnio atsakymo, užduok konkretesnį klausimą ;) Man blogas sprendimas gali atrodyti jau vien dėl to, kad naudojamas “daug pasakantis” kintamasis $row, arba tai, kad surenkami tiek asocijuotas tiek numeruotas masyvai, nors čia numeruotas net nenaudojamas. Na esmė manau aiški :)

  2. asterisk

    Aha.. my bad ;) Įsitikinau, kad people can’t read my mind :))

  3. Eimantas

    Sveiki, 7 klausimui galetu dar but papasakota apie register globals placiau :)

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.