Jump to content
php.lv forumi

Mysql klase?


shurix

Recommended Posts

  • Replies 52
  • Created
  • Last Reply

Top Posters In This Topic

q() = mysql_query

q1() = 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.

Link to comment
Share on other sites

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();

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...