Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pisanie funkcji - optymalizacja
Forum PHP.pl > Forum > PHP
andrzejb
czy taki sposob pisania fnkcji jest poprawny
  1. <?php
  2. function codeSig($code,$user_id){
  3. if(@mysql_query("INSERT INTO codes_sig (code, user_id, created) 
  4. VALUES ('{$code}','{$user_id}',NOW()")){
  5. return 1;
  6. }
  7. return 0;
  8.  
  9. }
  10. ?>

Tak wiec funkcja jest wykonywana , sprawdzamy warunek jezeli poprawny zworc 1 i zakoncz funkcje. Jezeli warnek sie nie spelni zwroc 0. Jakies sugestje ? uwagi ?
dtb
mozna to zrobic duzo prosciej:
  1. <?php
  2. function codeSig($code,$user_id){
  3. return @mysql_query("INSERT INTO codes_sig (code, user_id, created) VALUES ('{$code}','{$user_id}',NOW()");
  4. }
  5. ?>
dr_bonzo
Kod dtd jest wlasciwy:
1. exit jest niepotrzebne -- i tak nigdy nie zostanie wykonane
2. php to nie C -- uzyj true/false do okreslania prawidlowosci wykonania funkcji zamiast 1/0
3. manual:
Cytat
Dla innych [dla INSERT -- dr_bonzo] zapytań SQL mysql_query() zwraca TRUE lub FALSE informując czy zapytanie zakończyło się sukcesem czy też nie.


Odradzam uzywania malpy (@) -- lepiej uzyc w kodzie produkcyjnym error_reporting( 0 );
a w czasie tworzenienia aplikacji E_ALL zeby widziec gdzie popelniasz bledy.
tes
Cytat(dr_bonzo @ 11.11.2006, 12:50:18 ) *
2. php to nie C -- uzyj true/false do okreslania prawidlowosci wykonania funkcji zamiast 1/0


Bez sensu, w C także można zwracać wartości logiczne.
dr_bonzo
Cytat
w C także można zwracać wartości logiczne.

No tak. Pogooglowalem i od C99 mozna. Nie jestem tak dobry w C jak w php i gdy chcialem uzyc true/false to mi nie dzialalo. Dopiero w C++ bylo ok.


Dalej -- juz sam nie wiem jak to jest z booleanami :/
andrzejb
tak wiec dalej smile.gif

  1. <?php
  2. function codeTake($code,$type='sms'){
  3. if(mysql_query("UPDATE codes SET modfied=NOW(), left=0 WHERE code='{$code}'")){
  4. return 1;
  5. }else{
  6. return mysql_query("UPDATE codes SET modfied=NOW(), left=left-1 WHERE code='{$code}'");
  7. }
  8.  
  9. return 0;
  10. }
  11. ?>


z tym pierwszym warunkiem już chyba nic nie zrobie ?
nospor
@andrzejb ale na grzyba ktos ma sie trudzic i mowic uwagi, jak ty olewke na calego i tak robisz?
Patrz co ci napisano wczesniej:
Cytat
exit jest niepotrzebne -- i tak nigdy nie zostanie wykonane

A ty co na to? A ty na to: "spadaj koles i tak sie nie znasz a ja zrobie po swojemu".

Pozatym Twoja konstrukcja jest bez sensu:
Jesli nie powiedzie sie zapytanie to wykonaj je jeszcze raz. Gdzie sens i logika?
Tak wiem, ze zapytania te roznią sie tym kawalkiem: left=left-1, ale to nic nie zmienia, gdyz pierwszy update zwroci ci tylko false gdy jest blad zapytania (pomijam juz brak polaczenia do bazy), wiec jesli pierwsze sie nie wykona to nie wykona sie rowniez i drugie, ktore skladniowo jest identyczne
andrzejb
przyznam blad logiczny wagi o exicie niezauwazylem

  1. <?php
  2. function codeTake($code,$type='sms'){
  3. if($type=='sms'){
  4. return mysql_query("UPDATE codes SET modfied=NOW(), left=0 WHERE code='{$code}'");
  5. }else{
  6. return mysql_query("UPDATE codes SET modfied=NOW(), left=left-1 WHERE code='{$code}'");
  7. }
  8. return false;
  9. }
  10. ?>


to jest tylko stare jadro i tak ta czesc ma zmieszany model z kontrolerem ale to chodzi o mozliowsc przeniesienia kod do aplikacji struktralnych

czmu exit nie zostanie wykonany ? przeciez w takim razie powzyszy kod bez wzgledu na zapytanie i tak zwroci 0 bo na koncu zostanie wykonany return 0 ?
dtb
gdy uzywasz return to funkcja przestaje byc wykonywana, np. funkcja:
  1. <?php
  2. function dupa() {
  3. echo '1';
  4. return true;
  5. // od tej pory funkcja przestajem byc wykonywana, bo juz zwrocila jakas wartosc.
  6. echo '0';
  7. return false;
  8. }
  9. ?>

wydrukuje tylko 1 i zwroci true
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.