TS TworcaStron.pl.

Jak szybciej pisać w PHP

Dzisiaj porozmawiamy sobie o tym, jak można szybciej pisać w PHP. Część „trików” na pewno znasz bo są bardzo podstawowe, część być może nie. Niektóre dostępne są tylko od wersji PHP7 (zaznaczyłem które), a inne są nauczane od samych początków przygody z PHP. Bez przedłużania, zaczynajmy!

Nie domykanie <?php ?>

Jeżeli cały plik jest kodem php, lub kończy się takim właśnie kodem to nie ma potrzeby zamykania tagu <?php ?>. Czasami może to nawet zabezpieczyć przed błędami.

//początek pliku
<?php
  //skrypt 

//koniec pliku, brak zakończenia "?>"

Krótkie tagi

Często mamy sytuację, że w środku jakiegoś kodu HTML chcemy wstawić naszą zmienną. Najprostszy przykład to szablony – prawie cały kod jest pisany w HTML, a podmieniamy w nim poszczególne wartości. Na pewno spotkałeś się wiele razy z takim kodem:

<div class="<?php echo $active_class; ?>">
   <h1><?php echo $page_title; ?></h1>
   <p><?php echo $page_content; ?></p>
</div>

Można to zastąpić właśnie poprzez stosowanie krótkich tagów. Wtedy ten sam kod wyglądałby nieco inaczej:

<div class="<?=$active_class?>">
   <h1><?=$page_title?></h1>
   <p><?=$page_content?></p>
</div>

Już jest krócej. Krótkie tagi pozwalają na pominięcie „echo” oraz „php”: 
<?php echo $value; ?> <-> <?=$value?>. 

Krótkie tagi mogą zostać wyłączone w php.ini, dlatego nie wszędzie mogą działać.

Usuń klamry

Klamry nie zawsze są wymagane (Oczywiście mamy standardy PSR więc czasami lepiej je dawać) Programiści chyba dzielą się na 2 grupy: a) jak najkrótszy kod, b) jak najczytelniejszy kod, nawet jeśli będzie 2krotnie dłuższy. Osobiście jestem po środku. Warto dbać, aby kod był czytelny, ale bez kilku klamr dalej uważam go za przejrzysty. Przykład:

if($true){
   echo "To jest prawda";
}

To wyżej to jest pełny kod. Niektórzy opuszczają też klamrę otwierającą, do nowej linijki – okej, jeśli ktoś chce to proszę bardzo, ale można to zapisać dużo krócej:

if($true) echo "To jest prawda";

Możemy też szybciej piasć dłuższe operacje. Zresztą na studiach (przynajmniej moich) – usuwanie niepotrzebnych klamr było wręcz nakazem profesorów, aby maksymalnie skrocić kod.

if($true == true){
    echo 'To jest prawda';
}else{
    echo 'To nie jest prawda';
}

Możemy to zapisać tak:

if($true == true)
    echo 'To jest prawda';
else
    echo 'To nie jest prawda';

W ten sam sposób możemy zapisywać również pętle. Osobiście jestem zwolennikiem usuwania klamr, dopóki kod jest faktycznie przez to czytelniejszy. Jeżeli przez brak klamr zaczniesz  się gubić w kodzie, lub będzie on zwyczajnie mniej czytelny, to lepiej wócić i dopisać te kilka znaków.

Operator trójagrumentowy

Zwykły operator można zastąpić tzw. operatorem trójargumentowym. Standardowy kod:

if($content == "tajne"){
    echo 'Treść tajna, nie możesz jej zobaczyć';
}else{
    echo 'Witaj, Zapraszam dalej';
}

Możemy zapisać w ten sposób:

echo ($content == "tajne") ? 'Treść tajna, nie możesz jej zobaczyć' : 'Witaj, Zapraszam dalej';

Można to również zastosować przy nadawaniu zmiennym wartości, np:

if($gender == "male"){
  $name = 'Janusz';
}else{
  $name = 'Grażyna';
}

Skracamy i piszemy w ten sposób:

$name = ($gender == 'male') ? 'Janusz' : 'Grażyna';

Trójkowy isset

PHP 7 dał nam kilka fajnych funkcji. Jedną z nich jest tzw. trójkowy isset. Pozwala on szybko sprawdzić czy wartość istnieje i nie jest równa NULL – jeśli tak, to ją zwraca, w przeciwnym wypadku zwraca jakąś domyślną wartość, którą podamy.

Na początku nasz kod wygląda tak:

if(isset($name)){
   $my_name = $name;
 }else{
   $my_name = 'brak imienia';
 }

Ten kod możemy skrócić za pomocą operatora trójargumentowego (z poprzedniego punktu):

$my_name = (isset($name))? $name : 'brak imienia';

Już jest krótko, ale skorzystamy z trójkowego isseta i skrócimy kod jeszcze bardziej:

$my_name = $name ?? 'brak imienia';

Spaceship

Kolejna funkcjonalność PHP7. Potrzebujesz porównać 2 wartości i dowiedzieć się, która jest większa (ew. czy są równe)? Teraz jest na to szybki sposób:

echo (1 <=> 2); // wypisze -1
echo (2 <=> 2); // wypisze 0
echo (3 <=> 2); // wypisze 1

Możemy też tworzyć trudniejszy równiania:

echo  ('A' <=> 'B'); // wypisze -1
echo  ('C' <=> 'B'); // wypisze 1
echo  ([1,3] <=> [5,5]); // wypisze -1
echo  ([1,3,3] <=> [3,1]); // wypisze 1
echo  ('Jestem 3' <=> 'Jestem 1'); // wypisze 1

Tablice

Do czasu PHP w wersji 5.4 tablice definiowaliśmy tak jak w wielu innych językach, czyli:

$tab = array('name'=>'val');

ale z tym koniec! Od siódmej wersji tablice można skracać i tworzyć za pomocą klamr kwadratowych:

$tab = ['name'=>'val'];

Pętla foreach

Raczej każdy zna tablicę foreach jednak czasami można się natknąć na sytuację, gdzie ktoś stosuje pętle for() zamiast właśnie foreach(). Szczególnie przy przesiadce z JavaScriptu. Przykład:

$tab = array(1,2,3,4,5);
 
for($i=0; i<count($tab); $i++){
   //jakas akcja
}

Można to napisać w ten sposób:

$tab = array(1,2,3,4,5);
 
foreach($tab){
   //jakas akcja
}

Inkrementacja, dekrementacja

To pewnie znasz. Jeżeli chcemy zwiększyć lub zmniejszyć jakąś zmienną o 1, najczęśniej posługujemy się właśnie nimi. Czyli zamiast pisać:

$value = $value + 1;
$value = $value - 1;

Możemy napisać:

$value++;
$value--;

Operatory matematyczne

To też pewnie znasz, ale chcę żeby ten wpis był możliwie kompleksowy. W przypadku, gdy trzeba wykonać jakieś proste operacje matematyczne, możemy to zrobić tak:

$value = $value * 3;
$value = $value / $count;
$value = $value - 4.34;

Ale możemy to skócić i napisać tak:

$value *= 3;
$value /= $count;
$value -= 4.34;

Grupowanie „use”

Na koniec coś może bardziej zaawansowanego, znowu dostępne jedynie od wersji PHP7. Dostaliśmy możliwość grupowania deklaracji use. Wcześniej robiliśmy to w ten sposób:

use Tw\Controller\Blog;
use Tw\Controller\Course;
use Tw\Controller\Page;

Od PHP7 możemy skrócić to do jednej linijki:

user Tw\Controller\{Blog, Course, Page};

Szybciej pisać to nie wszystko

Pamiętaj, że szybkość pisania kodu to nie wszystko. Kod powinien być przede wszystkim poprawny, czytelny i zgodny ze standardami.

Dlatego koniecznie zobacz jeszcze:

9 nawyków dobrego programowania i 9 błędów web developera