Standard Kodiranja PHP Yii - SoftLab-IS/softlab-data GitHub Wiki
#Uvod
Standard kodiranja je uveden da bismo mogli razumjeti lakše tuđi kod i da bi se osigurala konzistentnost tokom programiranja svih ljudi u timu. Ovaj način kodiranja morate svi pratiti ukoliko želite raditi na ovom projektu. U daljem tekst biti će opisan način kodiranja kao i objašnjenje zašto se to koristi. Ovo je standard za PHP jezik.
#PHP
##Opšti zahtjevi
- Fajlove uvijek snimati u UTF-8 enkodingu bez BOM-a (Byte Order Mark).
- Između većih blokova koda ili dužih komentara obavezno ostaviti jednu praznu liniju.
- Prije i poslije
=
,<
,>
,>=
,<=
,==
,===
,!=
,!==
<>
,&&
,||
,+=
,-=
,*=
,/=
,%
,-
,+
,/
,"
,.
,*
,'
,;
,,
,=>
i!
znakova napraviti tačno jedan razmak ukoliko se nalaze u istoj liniji. - Prije i poslije
->
i::
znakova ne smije biti razmaka. - Prije početka kontrole tokova programa
switch
,if
,while
,do-while
,foreach
ifor
obavezno ostaviti jednu praznu liniju. - Nakon
}
napraviti tačno jedan prazan red. - Jedna komanda po liniji.
##Imena Fajlova
Imena fajlova u PHP-u se moraju pisati u Camel-Casing stilu, sa time što je prvo slovo malo. Ne koristiti slash -
ili underline slash _
znakove.
Nepravilan način: php_fajl.php
, PHPFajl.php
, php_Fajl.php
, php-fajl.php
, PHP-fajl.php
, php-Fajl.php
Pravilan način: phpFajl.php
, imePrezime.php
, testModel.php
Ovo se radi da bi se poštovao standard Yii framework-a.
##Zatvaranje PHP tagova
Ukoliko je čitav PHP fajl samo kod. Onda ga NE TREBA zatvarati koristeći ?>
.
Nepravilan način:
<?php
echo "Neki kod";
?>
Pravilan način:
<?php
echo "Neki kod";
// -- Izbaceno ?>
Ovo se radi da bi se izbjegla mogućnost da bude prostora poslije ?> zbog čega bi server mogao poslati headere i došlo bi do havarije kod samog PHP-koda.
##Imena promjenjivih
Imena promjenjivih trebaju da budu SMIŠLJENA i na ENGLESKOM jeziku. Promjenjive koje imaju samo jedno slovo su ISKLJUČIVO rezervisane za petlje. Ne koristiti predugačka imena. Imena trebaju da budu u Camel-Casing stilu sa malim prvim početnim slovom. Ne koristiti slash -
ili underline slash _
znakove.
Nepravilan način:
$j = 'foo'; // Promjenjive sa prvim slovom su SAMO za petlje
$Str // Prvo slovo veliko
$groupid // vise rijeci, id treba da pise Id
$imePosljednjegGradaKojiSeKoristio // predugacak naziv promjenjive, i nasko ime promjenjive.
Pravilan način:
$variable
$multipleWordVariable
$lastUsedCity
###Slanje promjenjivih preko asocijativnih nizova
Kod slanja promjenjivih putem asocijativnih nizova (kao što je funkcija $this->render
) imena promjenjivih moraju takođe poštovati gornji standard. Isto tako mora biti po jedna promjenjiva u jednom redu.
Nepravilan način:
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
Pravilan način:
$this->render('index',
array(
'dataProvider' => $dataProvider,
));
###Štampanje promjenjivih unutar View-a
Nepravilan način:
<?= $variable; ?>
Pravilan način:
<?php echo $variable; ?>
Ovo se koristi da bi se poštovao standard Yii framework-a. Promjenive unutar View-a se štampaju na drugi način zbog toga što neki serveri ne podržavaju gornji navedeni način štampe.
##Imena konstanti
Imena konstanti trebaju da budu SMIŠLJENA i na ENGLESKOM jeziku. Konstante moraju imati više od 4 slova i sva velika slova. Ne koristiti predugačke konstante. Kontante ne koristiti ukoliko nije neophodno. Konstante sa više riječi odvajati samo koristeći _
.
Nepravilan način:
mojaKonstanta
Konstanta1
Konstanta_Jedan
Pravilan način:
CONSTANT_1
LONG_NAME_CONSTANT
Ovo se koristi radi lakšeg razumjevanja koda.
##Nazivi klasa
Nazivi klasa MORAJU da imaju isto ime kao ime fajla sa time što im je prvo slovo veliko. Bracketi {}
moraju da počinju ispod imena klase. Ne koristiti slash -
ili underline slash _
znakove.
Nepravilan način:
class phpKlasa {
// Prvo p je malo
}
class PHPKlasa {
// Bracket { pocinje poslje imena klase.
}
class PHP_Klasa
{
// Postoji _ izmedju PHP i Klasa.
}
class PHP-Klasa
{
// Postoji - izmedju PHP i Klasa.
}
Pravilan način:
class PHPKlasa
{
}
Ovo se koristi radi čitanijeg koda.
##Nazivi funkcija
Nazivi funkcija trebaju da budu SMIŠLJENA i na ENGLESKOM jeziku, pišu se u Camel-Casing stilu sa time što je prvo slovo imena funkcije malo. Bracketi {}
moraju da počinju ispod imena funkcije. Ne koristiti slash -
ili underline slash _
znakove. Imena promjenjivih unutar funkcija moraju slediti gornja upustva za promjenjive. Argumenti unutar funkcije pored ,
moraju biti odvojeni tačno jednim space-om.
Kada je god moguće postaviti početne vrednosti funkcijama.
Nepravilan način:
function funkcija_1($test) {
// Bracket { mora poceti u novoj liniji
}
function funkcijaXY()
{
// Ime funkcije nije smisljeno
}
function FunkcijaAddExtraCredits()
{
// Prvo slovo veliko.
}
function addNewStudent($name,$isTrue,$bigNumber)
{
// Argumenti moraju biti odvojeti tacno jednim space-om.
}
Pravilan način:
function insertNewRow($rowName, $textData)
{
// Kod ovdje
}
Ovo se koristi radi čitanijeg koda i da se poštuje Yii standard.
##Vraćanje boolean vrednosti iz funkcija
Ukoliko se vraćaju vrednosti koje mogu biti true
ili false
ne koristiti if selekciju za odlučivanje (ukoliko je to moguće), nego vratiti ih direktno kao rezultat boolean evaulacije.
Nepravilan način:
function getIsActive()
{
if ($this->isActive > 0)
{
return true;
}
else
{
return false;
}
}
Pravilan način:
function getIsActive()
{
return ($this->isActive > 0);
}
Razlog za ovo je brže izvršavanje.
##Komentarisanje
Komentarisanje je obavezno i mora se primjenjivati. Komentari moraju biti na ENGLESKOM jeziku. Ne praviti predugačke komentare. Komentarisati u formalnom pasivu. Ne koristiti znakove č,ć,ž,š,đ
unutar komentara. Pisati isključivo latinicom.
###Komentarisanje klasa
Klase komentarisu u ovom formatu:
/**
* Class Name
*
* Opis Klase ovdje.
*
* @author Autor Klase
*/
class ClassName
{
}
###Komentarisanje funkcija
Funkcije se komentarisu u ovom formatu:
/**
* Opis funkcije
*
* @author Ime autora koji je vrsio zadnju izmjenu funkcije
*
* @param mixed $foo opis argumenta koja moze biti vise tipova (npr string ili array stringova)
* @param int $bar opis argumenta koji je tipa int
* @return mixed Opis toga sta funkcija vraca. mixed znaci da moze vratiti vise razlicitih vrednosti.
* (Ukoliko funkcija ne vraca nista @return se smije izostaviti.)
*/
function functionName($foo, $bar)
{
// Kod funkcije
}
###Komentarisanje akcije (funkcije) u kontroleru
Akcije u kontroleru se komentarisu u ovom formatu:
class PrimjerController
{
/**
* primjer/index
*
* @author Ime autora koji je vrsio zadnju izmjenu akcije
*
* @param mixed $foo opis GET argumenta koja moze biti vise tipova (npr string ili array stringova)
* @param int $bar opis GET argumenta koji je tipa int
*/
function actionIndex($foo, $bar)
{
// Kod funkcije
}
}
###Komentarisanje unutar view-a
Sve promjenjive koje se prosleđuju view-u moraju se navesti kao i ime kontrolera putem kojeg se view prikazuje. Ukoliko se pojedini view prikazuje putem više kontrolera, navesti ih.
<?php
/**
* Kratki opis view-a.
*
* @author Ime autora koji je zadnji vrsio izmjene
*
* @var $this PrimjerController Primjer Kontroler koji se uvijek prosledjuje kao $this.
* @var $model PrimjerModel Prosledjena model promjenjiva.
* @var $customNumber int Prosledjen broj putem kontrolera tipa int.
* @var $mixedVar mixed Promjenjiva koja moze biti vise tipova.
*/
// Ostali view kod
?>
<p>HTML kod viewera ovdje</p>
###Komentarisanje unutar funkcija
Komentari unutar funkcija nisu neophodni. Ukoliko se radi nešto na način koji nije vidljiv na prvi pogled onda je obavezno koristiti komentare.
/**
* Opis funkcije
*
* @author Ime autora koji je vrsio zadnju izmjenu funkcije
*
* @param mixed $foo opis argumenta koja moze biti vise tipova (npr string ili array stringova)
* @param int $bar opis argumenta koji je tipa int
* @return mixed Opis toga sta funkcija vraca. mixed znaci da moze vratiti vise razlicitih vrednosti.
* (Ukoliko funkcija ne vraca nista @return se smije izostaviti.)
*/
function functionName($foo, $bar)
{
// Bubble sort algoritam
for ($i = 0; $i < 10; $i++)
{
for ($j = 0; $j < 10; $j++)
{
// Provjera
}
}
}
Komentarisanje je neophodo zbog lakšeg razumjevanja tuđeg koda i inkorparcije istog. Kao i njegovu izmjenu u slučaju potrebe.
##Kontrola toka izvršenja
Imena promjenjivih unutar while
i do-while
petlji moraju poštovati gore navedeni standard za promjenjive. Bracketi {}
moraju da počinju ispod petlji while
, do-while
, foreach
i for
kao i if
i switch
kontrole toka. Ne koristiti goto
za kotrolu toka. Između while
, do-while
, foreach
i for
i (
ne smije biti razmaka.
Između if
i switch
kontrole toka i (
mora biti tačno jedan razmak.
Ukoliko se kod unutar kontrole toka sastoji samo od jedne linije, NE KORISTITI brackete.
Ukoliko se može koristiti, OBAVEZNO koristiti ===
umjesto ==
i !==
umjesto !=
. Da se utvrdi i tip promjenjive zajedno sa njenom vrednosti.
###for petlja
Promjenjive za iteraciju unutar ove petlje moraju da imaju samo jedno slovo i da idu za jedan karakter više od slova i
ukoliko se radi o ugneždenim petljama (j
, k
, l
, m
, n
,..., z
).
Pravilan način:
for($i = 0; $i < 10; $i++)
{
for($j = 0; $j < 20; $j++)
{
for($k = 0; $k < 30; $k++)
{
// Kod
}
}
}
####Korištenje unutar View-a
Pravilan način:
<?php for($i = 0; $i < 10; $i++): ?>
HTML ili PHP kod.
<?php endfor; ?>
Ukoliko se neke promjenjive mogu postaviti odmah nakon početka petlje:
Pravilan način:
<?php
for($i = 0; $i < 10; $i++):
$var1 = "test";
$var2 = $i . $var1;
?>
HTML ili PHP kod.
<?php endfor; ?>
###foreach petlja
Promjenjive za element unutar ove petlje moraju sljediti gornji navedeni standard o promjenjivim. Između keyworda as i promjenjivih mora biti tačno jedan razmak.
Pravilan način:
foreach($array as $item)
{
// Kod
}
foreach($array as $key => $value)
{
// Kod
}
####Korištenje unutar View-a
Pravilan način:
<?php foreach($array as $item): ?>
HTML ili PHP kod.
<?php endforeach; ?>
Ukoliko se neke promjenjive mogu postaviti odmah nakon početka petlje:
Pravilan način:
<?php
foreach($array as $item):
$var1 = "test";
$var2 = $i . $var1;
?>
HTML ili PHP kod.
<?php endforeach; ?>
###while petlja
Promjenjive unutar ove petlje moraju sljediti gornji navedeni standard o promjenjivim.
Pravilan način:
while($testVariable)
{
// Kod
}
####Korištenje unutar View-a
Pravilan način:
<?php while($testVariable): ?>
HTML ili PHP kod.
<?php endwhile; ?>
Ukoliko se neke promjenjive mogu postaviti odmah nakon početka petlje:
Pravilan način:
<?php
while($testVariable):
$var1 = "test";
$var2 = $i . $var1;
?>
HTML ili PHP kod.
<?php endwhile; ?>
###do-while petlja
Promjenjive unutar ove petlje moraju sljediti gornji navedeni standard o promjenjivim. Između }
i while
napraviti tačno jedan razmak.
Pravilan način:
do
{
// Kod
} while($testVariable);
####Korištenje unutar View-a
Pravilan način:
<?php do { ?>
HTML ili PHP kod.
<?php } while($testVariable); ?>
Ukoliko se neke promjenjive mogu postaviti odmah nakon početka for petlje:
Pravilan način:
<?php
do {
$var1 = "test";
$var2 = $i . $var1;
?>
HTML ili PHP kod.
<?php } while($testVariable); ?>
###if selekcija
Promjenjive unutar ove selekcije moraju sljediti gornji navedeni standard o promjenjivim. Ukoliko se koriste ‚else
ili else if
nakon }
postaviti ih u novi red.
Pravilan način:
if($testVariable)
{
// Kod
}
else if ($anotherTest)
{
// Else if kod
}
else
{
// Else kod
}
####Korištenje unutar View-a
Pravilan način:
<?php if ($testVariable): ?>
HTML ili PHP kod.
<?php else if ($anotherTest): ?>
Elseif HTML ili PHP kod
<?php else: ?>
Else HTML ili PHP kod.
<?php endif; ?>
Ukoliko se neke promjenjive mogu postaviti odmah nakon početka selekcije:
Pravilan način:
<?php
if ($testVariable):
$variable1 = 10;
?>
HTML ili PHP kod.
<?php
else if ($anotherTest):
$variable2 = 10;
?>
Elseif HTML ili PHP kod
<?php else:
$variable3 = 10;
?>
Else HTML ili PHP kod.
<?php endif; ?>
###switch selekcija
Promjenjive unutar ove selekcije moraju sljediti gornji navedeni standard o promjenjivim. Svaki case
mora biti ugnježden u svom redu. Ukoliko se koristi return
ne stavljati break nakon njega.
Pravilan način:
switch($testVariable)
{
case 1:
// Kod
break;
case 2:
// Kod
break;
default:
// Else Kod
}
####Korištenje unutar View-a
Pravilan način:
<?php
switch($testVariable):
case 1:
?>
HTML ili PHP kod.
<?php
break;
case 2:
?>
HTML ili PHP kod
<?php
break;
case 3:
?>
HTML ili PHP kod
<?php endswitch; ?>
Ukoliko se neke promjenjive mogu postaviti odmah nakon početka selekcije:
Pravilan način:
<?php
switch($testVariable):
case 1:
$variable1 = 10;
?>
HTML ili PHP kod.
<?php
break;
case 2:
$variable2 = 10;
?>
HTML ili PHP kod
<?php
break;
case 3:
$variable3 = 10;
?>
HTML ili PHP kod
<?php endswitch; ?>
Razlog za ovaj način korištenja je zbog razumjevanja koda i poštovanja Yii standarda.