átláthatóbb kód, ti hogy csináljátok?
Hello!
Már évek óta érdekel, ki hogy oldja meg a kód könnyű átláthatóságát csak mindig elfelejtem megkérdezni :)
Van két dolog is amivel mindig megy a "pepecs munka"
Első:
ha meg kell szakítani a php kódot, majd újra php majd megint megszakad stb...
ez nálam néha kaotikus állapotokat eredményezMásodik:
a PHP-ból SQL-be való varázslás gyötrelmei mint pl a hozzáadásTi ezeket hogy oldjátok meg hogy szépen átláthatóak legyenek?
ui.: a kódok lehet nem teljesen helyesek, mert csak úgy hasraütésre írtam, úgyhogy abba nem ér belekötni ;)
■ Már évek óta érdekel, ki hogy oldja meg a kód könnyű átláthatóságát csak mindig elfelejtem megkérdezni :)
Van két dolog is amivel mindig megy a "pepecs munka"
Első:
ha meg kell szakítani a php kódot, majd újra php majd megint megszakad stb...
ez nálam néha kaotikus állapotokat eredményez
<?php
$order = "SELECT * FROM table ORDER BY id DESC";
$result = mysql_query($order);
while ($line = mysql_fetch_array($result)) {
?>
<h1>
<a class="link1" href="valami.php?id=<?php echo $line['id']; ?>">Link</a>
</h1>
<img class="pic1" src="img/<?php echo $line['picture'];?>" alt="<?php echo $line['picture_name']; ?>" width="400" height="100"/>
<p class="para1">
<?php
if ($valami == 1) {
?>
<a href="valahol.php?valami=<?php echo $line['valami']; ?>">
<img style="image_link" src="valami.jpg" alt="valami" title="valami">
</a>
<?php
}
?>
</p>
<?php
}
?>
a PHP-ból SQL-be való varázslás gyötrelmei mint pl a hozzáadás
$sql = "INSERT INTO table (id, car, cat, dog, color, house, white, plan, computer, gear, thing, that, data, voltage,
yellow, red, qwerty, laptop, pda, phone, chemical, vinyl, what, who, why, you, we, race) VALUES
('" . $_POST['id'] . "', '" . $_POST['car'] . "','" . $_POST['cat'] . "','" . $_POST['doc'] . "',
'" . $color . "','" . $_POST['house'] . "','" . $_POST['white'] . "','" . $_POST['plan'] . "',
'" . $_POST['computer'] . "','" . $_POST['gear'] . "','" . $_POST['thing'] . "',
'" . $_POST['that'] . "','" . $_POST['data'] . "','" . $_POST['voltage'] . "',
'" . $_POST['yellow'] . "','" . $_POST['red'] . "','" . $_POST['qwerty'] . "',
'" . $_POST['laptop'] . "', '" . $_POST['pda'] . "','" . $_POST['phone'] . "',
'" . $_POST['chemical'] . "','" . $_POST['vinyl'] . "','" . $_POST['ehat'] . "',
'" . $_POST['who'] . "','" . $_POST['why'] . "','" . $_POST['you'] . "',
'" . $_POST['we'] . "','" . $_POST['race'] . "', '" . $_POST['kimaradt_valami'] . "')";
mysql_query($sql);
ui.: a kódok lehet nem teljesen helyesek, mert csak úgy hasraütésre írtam, úgyhogy abba nem ér belekötni ;)
Templatezés
Egyébként cool nick. :)
Off
Erről az jut eszembe, mikor a barátom mindig valahogy így formázza meg a D: particíóját: "Formázatlan" //pontosan már nem emlékszem mi a default, régen voltam már windows alatt:-)
hááát...
Használd
templatezés
apróságok
<html>
<?php endif;?>
én valahogy így formáztam volna:
/**
* Use comments, because after a while,
* you wont remember what the code does
*/
$order = "SELECT * FROM table ORDER BY id DESC";
$result = mysql_query($order);
while ($line = mysql_fetch_array($result)):
?>
<h1>
<a class="link1" href="valami.php?id=<?php echo $line['id']; ?>">Link</a>
</h1>
<img class="pic1" src="img/<?php echo $line['picture'];?>" alt="<?php echo $line['picture_name']; ?>" width="400" height="100"/>
<p class="para1">
<?php if ($valami == 1):?>
<a href="valahol.php?valami=<?php echo $line['valami']; ?>">
<img style="image_link" src="valami.jpg" alt="valami" title="valami">
</a>
<?php endif;?>
</p>
<?php endwhile;?>
második
function InsertIntoTable($parameter, $param1, $myparam, $stb...)
{
$sql = "INSERT INTO table (id, car, cat, dog) VALUES ('" . $parameter . "', '" . $param1 . "','" . $myparam . "','" . $stb . "')";
return mysql_query($sql);
}
InsertIntoTable(
$_POST['id'],$_POST['car'],$_POST['cat'],
$_POST['doc']
);
?>
Tehát én így csinálnám. Könnyen áttekinthető, és nekem tetszik a megoldás :)
DB Layer
Használj MVC-t, akkor kevesebb php kód lesz a template fájlokban. Ha új szintaktikát is meg akarsz tanulni, akkor ismerj meg egy template libet: smarty, phptal, stb.
Első: Ha csak kicsit akarsz
Ha csak kicsit akarsz jót magadnak, akkor hagyj fel azzal, hogy egynél több <? ?> párt írsz. Ha valamit ki akarsz írni, akkor printf(""). Sosem kell megszakítanod a PHP kódot.
Ha nagyon jót akarsz magadnak, akkor viszont egy fentebb említett template rendszert kellene alkalmaznod.
Második:
Ha csak kicsit akarsz jót magadnak, akkor mysqli_prepare. A függvény használata ki fog kényszeríteni egy bizonyos átláthatóságot.
Ha nagyon jót akarsz magadnak, akkor meg egy fentebb említett db-kezelő réteget válassz.
...
Köszönöm, tényleg átláthatóbbak. Ezeket te így használod vagy te is templatezel?
A tab helyett miért jobb a 4 szóköz?
deejayy
és a printf-et hogy használod? Egy sorba írod az egész kódot amit ki szeretnél íratni?
pl az alábbi kódon hogy alkalmazod?
Írhatod több sorba is,
válasz
Amúgy a kódodat minnél jobban rétegekre bontod, annál átláthatóbb lesz, könnyebben bővíthető.
Ahogy korábban is említették az MVC nagyon jó erre a célra. Legjobb zend, kisebb projektnél simán megfelel mondjuk egy CodeIgniter.
Amit az mvc-ben még szeretek hogy nem kell külön template engine vagy külön db kezelő réteg (persze nem azt jelenti hogy nem lehet, de általában felesleges :))
tanulni, tanulni, taulni
Hát akkor úgy érzem itt az ideje jobban megismerkednem ezekkel az általatok ajánlott megoldásokkal...
Köszönöm szépen (MINDENKINEK) az agytágítást!
tab
Teljesen egyetértek, plusz
Szóköz vs tab
Továbbá teljesen biztos lehetek benne, hogy puttyal belépve a szerverre és kilistázva a kódot, pontosan ugyanazt fogom látni, mint ahogy a szerkesztőben láttam.
Konvertálásra én az UltraEditet szoktam használni, gond nélkül cserélgeti le a tabokat és szóközöket, oda-vissza.
Én eddig a "tabosan" készített fájloknál mindig találtam minimum 1-2 sort, ahol szóközök voltak TAB helyett, ami nem azonos beállítás esetén szétcsúszott kódot eredményezett. Hozzá kell tennem az igazság kedvéért, hogy ezekkel a kódokkal más problémák is voltak :D
A szóköz univerzális, mindig, mindenhol elérhető, még ha néha kényelmetlen is.
sql + php
1: átláthatóbb
2: ha bővíted a tábládat amíg ezek az oszlopnevek léteznek addig nem fut hibára a php kód
3: hasonlít az UPDATE-re :) (ON DUPLICATE KEY UPDATE ...)
4: francia idézőjelek meg rám ragadt valahol
ha a php kódba html kerül - itt megjegyezném hogy a php nagyon jó kis sablon kezelő, nem attól lesz valami MVC struktúrájú hogy Smarty-t használ - akkor:
jah meg persze sok múlik a szerkesztőn is
én az aptana studió 1.5-t találom a legmegfelelőbbek önmagam számára
nyűgök
if(...): ?>
<?php else: ?>
<?php endif;
?>
stb. sajnos ezzel (illetve minden php-ból küldött printnél) felmerül a probléma, hogy ha a forrás php-t indentáljuk logikailag, akkor az a html kimenet indentálásába is beleszól. ami persze nem a legnagyobb probléma, de már a php-ben is különböző szintre kerülhet az egy szinten álló elemek kiirkálása... másrészt, ha nestelni akarsz, be kell zárni mindent <?php ?> elemek közé, nem beszélve pl a változók <?php echo $v ?> beszúrásáról, és a végén több lesz a <?php ?> mint a html kód...
ezekre csak a markup teljes leválasztása ad megoldást, amivel más bajok vannak (de működőképes). printf-el szerintem jó lenne nem html kódot irkálni, kivéve talán, ha a template 'máshonnan' jön, és
printf ($sablon, $v1, $v2...);
?>
formára lehet hozni, talán erre gondolt...
adatbázissal tényleg jobb nem direktben foglalkozni, hanem valami layerre bízni, pl nálam
<code><?php
$this->Database->prepare ('INSERT INTO tbl %s') ->set ($data) ->execute();
?></code>
formában történik, ahol $data egy tömb, a tábla mezőneveivel indexelve... létezik $Database->insert($tbl, $data) is, de azt nem szeretem...
viszont $_POST elemeit semmiképp nem kéne közvetlen adatbázisba tenni :)
erről eszembe jutott ami még
a view-ben:
http://hu.php.net/manual/en/i
Ez valóban működik, ha be van