Kā vēl var izmantot PHP konstantes ?
12. July, 2007, 10:49 PamācībasCik bieži Jums gadās kodā saskarties ar (vai pat pašam rakstīt) šādu kodu ?
<?php
if ($row['type'] == 1) {
// ...
} elseif ($row['type'] == 2) {
// ...
}
?>
Šis būtu tāds klasisks piemērs sevis nedokumentējošam kodam. Lai zinātu, kas tad īsti ir tips #1 un tips #2, mums būtu vai nu jāpēta pārējais kods, kas, iespējams, varētu dot kaut kādas norādes, ko tie nozīmē; vai arī jāmeklē, kur tas būtu aprakstīts dokumentācijā. Visticamāk, ka otrais variants nebūtu iespējams.
Tātad - lai izvairītos no šādas situācijas, ir ieteicams definējēt šos tipu (vai jebko citu) veidus kā konstantes. Un salīdzināšanā izmantojiet tās. Ideja nav jauna - es tikai to reklamēju tālāk. Atzīšos - pats ļoti daudz esmu grēkojis ar hard-coded vērtībām kodā (savai aizstāvībai gan varu teikt, ka parasti mēģinu nokomentēt, ko tad tie cipari nozīmē).
Konstanšu izmantošana izskatītos aptuveni šādi:
<?php
define('MYAPP_TYPE_FIRST, 1);
define('MYAPP_TYPE_SECOND', 2);
if ($row['type'] == MYAPP_TYPE_FIRST) {
// ...
} elseif ($row['type'] == MYAPP_TYPE_SECOND) {
// ...
}
?>
Protams, konstanšu nosaukumi reālā dzīvē būtu aprakstošāki - tādi kas reāli aprakstītu vērtības būtību. Šeit vairāk par FIRST un SECOND nevarēju izdomāt :). MYAPP_ prefiks ir paredzēts, lai būtu mazāka iespēja, ka konstante varētu konfliktēt ar kādu citu konstanti (piemēram, ja aplikācija tiek likta kopā no dažādiem moduļiem, tad tā varētu būt diezgan liela iespēja). Mazākām aplikācijām tas varētu arī nebūt tik būtiski.
PS. Rakstot šo rakstu, mans FF izdomāja aiziet atpūsties jeb nokārties. Biju pārsteigts cik labi strādā FF “Session Restore” fīča - raksts nebija pazudis. :)


12. July, 2007, 11:00
Prātīgs domu gājiens. Cenšos tā arī darīt, lai gan biežāk gan indeksus masīviem definēju, pēc kuriem tad arī var vienmēr atrast visu. piemēram:
… $row[’type’]== $config[’somename’] …
12. July, 2007, 11:02
izmantot konstantes cipariņu vietās rulez :) īsto konstanšu spēku var sajust arī tad, kad vajag pārtaisīt - serach in files pēc konstantes vārda var daudz palīdzēt, negribas pat iedomāties kā meklēt pa visiem failiem pēc 1 un 2.
12. July, 2007, 11:13
Jep, magic constantes ir īvil.
Bija mums kods darbā (lai arī ne-php), kur tika lietotas konstantes daudz un dikti - 42, 11, 10, utt (pārsvarā kā bitu pozīcijas/skaits). Ej un uzmini to semantiku :)
http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_code
12. July, 2007, 11:15
Ha, wordpress neļauj linkā iekavām būt ;)
Te tas pats links: http://hop.02.lv/jc
12. July, 2007, 12:56
wordpresam ir fiicha autosave kas notiek pie raksta rakstiishanas :) arii noderiiga lieta :)
12. July, 2007, 14:11
[…] uz “Kā vēl var izmantot PHP konstantes ?“, laacz IRC kanālā izteicās, ka konstantes vēl labi var izmantot funkcijām definējot […]