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 i for 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.
⚠️ **GitHub.com Fallback** ⚠️