Kaklz Posted August 20, 2010 Report Share Posted August 20, 2010 Es savu risinājumu tev piedāvāju jau n komentārus augstāk. Nekas šajā jautājumā nav mainījies :) Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 q() = mysql_queryq1() = string mysql_result ( resource $result , int $row [, mixed $field = 0 ] ) q2() = mysql_fetch_row / mysql_fetch_assoc Es domāju, ka tas ir joks, jo tavs risinājums acīmredzami neder, jo tās ir PHP extension-a iebūvētās funkcijas. Nevar taču esošās funkcijas pārrakstīt ar citu funckionalitāti, jo tad gan uzturēt būs vēl grūtāk. Cilvēks lasa kodu, redz sev zināmu funkciju, bet nevar saprast, kas ar viņu tiek darīts, jo parametri savādāki. Tā tikai vēl vairāk mulsinās koderi. Quote Link to comment Share on other sites More sharing options...
Kaklz Posted August 20, 2010 Report Share Posted August 20, 2010 Ko nu vari ņemties. Pats taču ļoti labi vienā no saviem nākamajiem komentāriem parādīji, ka lieliski saproti manu domu gājienu: tavā variantā: $result = $db->query('SELECT * FROM users WHER username='.$db->real_escape_string($username)); $user = $result->fetch_assoc(); Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 (edited) Tātad tu iesaki vispār neveidot šādu klasi un izmantot mysqli klasi? Tad man tev viens piemeŗs no dzīves: Ajaxīga aplikācija, kurai vajag atlasīt, piemēram, komentārus rakstam un atgriezt json formātā. articlesByTag ir metode ajax kontrolerim, kura tiek izsaukta uz noteiktu pieprasījumu. "tavā" variantā: function articlesByTag(){ $db=new Mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DB); $aid=$db->real_escape_string($_POST['aid']); $offset=$db->real_escape_string($_POST['offset']); $result=$db->query('SELECT * FROM comments c, users u WHERE c.uid=u.id and c.aid=$aid LIMIT $offset,20'); $comments=array(); while ($row=$result->fetch_assoc()){ array_push($comments,$row); } echo json_encode($comments); } manā variantā: function articlesByTag(){ $comments=DB::q3('SELECT * FROM comments c, users u WHERE c.uid=u.id and c.aid=%s LIMIT %s,20',$_POST['aid'],$_POST['offset']); echo json_encode($comments); } Kuru kodu tu sauc par pārskatāmu un viegli uzturuamu? Edited August 20, 2010 by codez Quote Link to comment Share on other sites More sharing options...
Kaklz Posted August 20, 2010 Report Share Posted August 20, 2010 integer vērtībām mysql_real_escape_string nav vajadzīgs: function articlesByTag(){ $db=new Mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DB); $result=$db->query('SELECT * FROM comments c, users u WHERE c.uid=u.id and c.aid=' . (int)$_POST['aid'] . ' LIMIT ' . (int)$_POST['offset'] . ' ,20'); $comments=array(); while ($row=$result->fetch_assoc()){ $comments[] = $row; } echo json_encode($comments); } Un jā, šāds variants, manuprāt, ir labāks, vieglāk uzturams. Quote Link to comment Share on other sites More sharing options...
Kavacky Posted August 20, 2010 Report Share Posted August 20, 2010 ja funkcijas ir q1(), q2(), q3(), tad gan būs jāskatās visas. Nedaudz pielabojot codez versiju, jāpārsauc metodes par q0(), q1(), q2(). Tādējādi nosaukumi pareizi atspoguļo atgrieztā rezultāta dimensijas, līdz ar to dokumentācijā pēc attiecīgas piezīmes par nosaukuma/dimensiju saistību viss būs skaidrs jau pēc pirmās metodes aplūkošanas, nesērčojot pārējās divas. Šis varētu būt no retajiem gadījumiem, kur šādas supersaīsinātās metodes tomēr saglabā loģiku, attiecīgi, to varētu tiešām izmantot lietderīgi. Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 (edited) Kaklz,pieņemsim, ka tas ir portāls, kurš plāno izaugsmi un laikus paredz, ka rakstu skaits var pārsniegt int vērtību, kā tas notika daudziem twittera api izmantotājiem, u.c. Bet nu par to vieglāk uzturētību šijā gadījumā tas ir subjektīvs jautājums, vienam varbūt ir vieglāk uzturēt garāku kodu, bet tādu, kurš izmanto standarta funkcijas, kamēr man noteikti ir viglāk uzturēt vismaz 2x īsāku kodu, kurš izmanto kaut kādu nestandarta abstrakcijas slāni ar kuru es esmu iepazinies. Edited August 20, 2010 by codez Quote Link to comment Share on other sites More sharing options...
Kaklz Posted August 20, 2010 Report Share Posted August 20, 2010 Sākam no gala? Izlasi vēlreiz manu pirmo komentāru. Ja tā tev ir ērtāk, tad klusiņām lieto. Tu nevienā publiskā frameworkā neatradīsi metodes ar tādiem nosaukumiem, jo labais stils pieprasa rakstīt metodes ar intuitīvi saprotamiem nosaukumiem. Informāciju vari pasmelties kaut vai šeit: http://framework.zend.com/manual/en/coding-standard.naming-conventions.html Nodaļā Functions and methods: Function names may only contain alphanumeric characters. Underscores are not permitted. Numbers are permitted in function names but are discouraged in most cases. Function names must always start with a lowercase letter. When a function name consists of more than one word, the first letter of each new word must be capitalized. This is commonly called "camelCase" formatting. Verbosity is generally encouraged. Function names should be as verbose as is practical to fully describe their purpose and behavior. Pie tam līdzīga rakstura tekstus tu atradīsi praktiski jebkurā modernā frameworkā. Tieši tāpēc es tevi aicināju nemācīt cilvēkus uz pretējām lietām, kā tiek ieteikts būvējot frameworkus. Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 (edited) Nedaudz pielabojot codez versiju, jāpārsauc metodes par q0(), q1(), q2(). Tādējādi nosaukumi pareizi atspoguļo atgrieztā rezultāta dimensijas, līdz ar to dokumentācijā pēc attiecīgas piezīmes par nosaukuma/dimensiju saistību viss būs skaidrs jau pēc pirmās metodes aplūkošanas, nesērčojot pārējās divas. Jā, šis šķiet arī loģiski. Vē var arī izveidot vienkārši vienu funkciju, kura skatās, ja tiek kverijs atgriež vienu rindu ar vienu kolonnu, tad atgriež uzreiz to vērtību, ja atgriež vienu rindu, tad atgrieži 1D masīvu, ja atgriež vairākas rindas, tad 2D masīvu. Respektīvi, ja kverijs nosaka atgriezto vērtību. print_r( DB::q('SELECT count(*) FROM users') ); //2 print_r( DB::q('SELECT * FROM users WHERE id=$s',1) ); //array( [id] => 1 [un] => john) print_r( DB::q('SELECT * FROM users') ); //array( [0] => array( [id] => 1 [un] => john) [1] => array( [id] => 2 [un] => smith) ) Edited August 20, 2010 by codez Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 (edited) Tu nevienā publiskā frameworkā neatradīsi metodes ar tādiem nosaukumiem, jo labais stils pieprasa rakstīt metodes ar intuitīvi saprotamiem nosaukumiem. Un ko tu teiksi par šādām iebūvētām PHP funkcijām?: strnatcmp() strspn() reset() strcoll() ucwords() pieņemu, ka tu kādu no funkcijām zini no pieredzes, bet tās kuras tu nezini, vai tu vari intuitīvi pateikt, ko tās dara (aptuveni)? un tās ir naturālās PHP funkcijas. Edited August 20, 2010 by codez Quote Link to comment Share on other sites More sharing options...
Леший Posted August 20, 2010 Report Share Posted August 20, 2010 Tik smalki par labu stilu nezinu, bet ja man nāktos suportēt projektu, kuru pirms tam sarakstīja ar šitādiem q1(), q2() utt, tad es labāk uzzinātu "meistara" adresi un atnāktu ciemos ar motorcirvi. Pats izmantoju nosaukumus a-la query(), result(), fetch() utt. Rakstīt nebūt nav grūti, ņēmot verā code prediction, kas ir katrā IDE. Quote Link to comment Share on other sites More sharing options...
Kaklz Posted August 20, 2010 Report Share Posted August 20, 2010 Nevienam nav noslēpums, ka daļas iebūvēto php funkciju nosaukumi vēsturiski ir izveidojušies neveiksmīgi, intuitīvi nesaprotami un ar ačgārnu parametru secību. Tas nenozīmē, ka tev šī pieredze ir jāpārņem un jāturpina. Tu vari darīt labāk. Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 (edited) Pie tam līdzīga rakstura tekstus tu atradīsi praktiski jebkurā modernā frameworkā. Tieši tāpēc es tevi aicināju nemācīt cilvēkus uz pretējām lietām, kā tiek ieteikts būvējot frameworkus. Tas nav arguments, ka dažos freimworkos iesaka darīt tā. Es tev varu atrast vēl vairāk freimworkus, kuros nav šādi ieteikumi. Tu vari darīt labāk. Es jau daru labāk un pagaidām neesmu redzējis nevienu argumentu, kurš norādītu, ka es nedaru labāk un kāpēc es nedaru labāk. Edited August 20, 2010 by codez Quote Link to comment Share on other sites More sharing options...
codez Posted August 20, 2010 Report Share Posted August 20, 2010 (edited) Tik smalki par labu stilu nezinu, bet ja man nāktos suportēt projektu, kuru pirms tam sarakstīja ar šitādiem q1(), q2() utt, tad es labāk uzzinātu "meistara" adresi un atnāktu ciemos ar motorcirvi. Ja kāds nevar, paskatoties uz šādu kodu, uzreiz pateikt, ko šis kods dara: $user=DB::q2('SELECT * FROM user WHERE id=%s',$uid); echo "Hello, $user"; Tad es, ja uzzinātu, ka kāds tāds, suportē projektu, kuru esmu pirms tam emsu rakstījis, es uzzinātu atbildīgā vārdu, kurš ielicis šo cilvēku, un aizietu pie viņa mājās ar motorzāģi. Bet piedāvāju arī tev izvirzīt savus variantus konkrēti šīs problēmas risinājumam. Edited August 20, 2010 by codez Quote Link to comment Share on other sites More sharing options...
php newbie Posted August 20, 2010 Report Share Posted August 20, 2010 ja es uzzinātu ka viņš uzzināja... es atnāktu ar motorlapstu Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.