Myślisz, że zarabiasz tyle, na ile zasługujesz? Zapraszamy do wzięcia udziału w anonimowej ankiecie.
3

Ostatnio znajomy zwrócił mi uwagę, żebym nie używał funkcji extract() w moim kodzie. Nie potrafił mi jednak jasno wytłumaczyć dlaczego nie powinienem tego robić. Bardzo lubię tą funkcję, jest szybka, elegancka i zaoszczędza mi dużo pisania. Jakie są wady jej użycia?

flag

4 Answers

3

extract zrobic ci z indeksów tablicy asocjacyjnej zmienne takie jak klucze czyli z tablicy array( 'jeden' => 'wartosc', 'dwa' => 'wartosc' ) bedziesz miał dwie zmienne $jeden i $dwa.

Jeśli nieuważnie użyjesz tej funkcji doporowadzisz do sytuacji kiedy nadpiszesz sobie jakieś zmienne i będzie Ci to cięzko zdebugować. extract najlepiej używać w krótkich metodach kiedy masz pełną kontrolę nad zadeklarowanymi zmiennymi

Jeśli masz wątpliwości zajrzyj do manuala http://pl.php.net/manual/en/function.extract.php

link|flag
3

Problem z extract polega na tym że zaciemnia kod. Na pierwszy rzut oka nie jesteś w stanie określić skąd pochodzą zmienne czy są to zmienne globalne czy lokalne czy argumenty funkcji. Funkcja extract może odrobinę przyśpieszyć pisanie kodu ale w przypadku gdy wracasz do jakiegoś fragmentu po dłuższym czasie może wydłużyć np. szukanie błędu i debugowanie.

Poza tym czy to na prawdę problem napisać dla każdej zmiennej:

$userName = $user['name'];

? :)

link|flag
2

dobra dobra ...

mamy formularz : zwraca nam tablice array('imie'=>'Maciej','firma'=>'ajtis.pl')

teraz kawalek kodu ...

<?php

$isAllowedToOpenThisShit=0;

$dane=(object) $_POST;

$isAllowedToOpenThisShit==1 ? self::deleteAllPhpCodeYouHaveWrote() : 'nie masz uprawnień '.$dane->imie;

?>

Wynik : nie masz uprawnień Maciej.

dobra a teraz nasz extract + firebugiem modyfikujemy sobie formularz dodając:

< imput type="hidden" name="isAllowedToOpenThisShit" value="1"/>

<?php

$isAllowedToOpenThisShit=0;

extract($_POST);

$isAllowedToOpenThisShit==1 ? self::deleteAllPhpCodeYouHaveWrote() : 'nie masz uprawnień '.$dane->imie;

?>

Wynik : skasowałeś internet !!!!

link|flag
1

Największą wadą tej funkcji jest to że istnieje, bo tworzenie oraz nadpisywanie zmiennych w niekontrolowany sposób to krótka droga do błędów w działaniu aplikacji lub do dziur bezpieczeństwa.

link|flag

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.