Co to jest zmienna?

Zmienna w PHP to pudełko, często nazywane przez programistów kontenerem,  który przechowuje potrzebną wartość lub wartości, dodatkowo mamy możliwość różnego rodzaju manipulacji tych zmiennych. 

Ogólny wzór zmiennej w PHP ma postać:

$[NAZWA] = [WARTOSC];

Praktyczne przykłady wyglądają następująco:

$age  = 50;
$name = 'Daniel';
$fruits = [
 "lemon",
 "orange",
 "banana",
 "apple"
];

Ciężko sobie wyobrazić świat programowania bez zmiennych, bo dzięki nim programista nie musi się przejmować, gdzie w pamięci fizycznej komputera znajdują się potrzebne informacje.  Bez zmiennych albo musielibyśmy operować fizycznymi adresami pamięci i pamiętać, że wartość  waga danej osoby (jeżeli piszemy aplikację o odchudzaniu) znajduje się w miejscu w o fizycznym adresie pamięci 0x146145 albo musielibyśmy operować tylko na nic niemówiących literałach liczbowych np. 80, których i tak nie dałoby się zmieniać w czasie.Dzięki zmiennym mamy  prostą do zapamiętania nazwą zmiennej np.  $personWeight, którą możemy w prosty sposób, za pomocą różnych wyrażeń wbudowanych w PHP, manipulować.

Jak manipulować? Przykładowo co 7000 spalonych kalorii odejmować jeden kilogram: 

<?php

$personWeight = 80;

if($calories == 7000) {

   $personWeight = $personWeight - 1;

}

Takich pudełek podczas pisania kodu używamy całą masę.  Przechowywana wartość w PHP może być zwykłym literałem reprezentująca ustaloną wartość, czyli np. literał liczbowy jak "35", czy literał tekstowy (string) jak "Ala ma kota". Mogą to też być inne typy danych w PHP, które są obsługiwane przez ten język.

Rodzaje zmiennych w PHP

W PHP występują obecnie trzy typy zmiennych:

  • skalarne (integer, float, string, boolean),
  • złożone (array, object),
  • specjalne (resource, NULL).

Te rodzaje zmiennych pozwalają przypisać typy danych opisane bardziej szczegółowo poniżej. 

Typy danych obsługiwane przez PHP, które możemy przypisać do zmiennych

Integer - typ danych dla liczb całkowitych, np.: 1, 100, -10,

$age = 40;​

Float  - czyli typ danych przechowujący liczby rzeczywiste, np.: 1.13, -10.3, 1.00,

$ratio = 1.4;​

String - typ danych przechowujący ciąg znaków, np. "Ala ma kota".

$surname = 'Kowalski';​

Boolean - typ logiczny, inaczej typ boolowski, jest to typ trzymający dwie wartości, prawda lub fałsza, w PHP reprezentowane jako true lub false. Ciekawostką jest, że nazwa tego prostego typu pochodzi od angielskiego nowatora logiki, matematyka George'a Boole'a.

$isOpen = false;​

Array - czyli typ trzymający tablicę PHP. Równie trzymamy tutaj tablicę prostą w formie listy ['kwiatek', 'grzyb', 'mięso'], gdzie klucz poszczególnych elementów jest liczbą całkowitą liczoną od 0 i mamy 0 => 'kwiatek', 1 => 'grzyb', 2 => 'mięso' jak i tablice asocjacyjne, które dodatkowo posiadają klucz w formie tekstowej(string) jak np. ['imie' => 'Jan', 'nazwisko' => 'Kowalski', 'wiek' => '30',  'kolor_oczu' => 'niebieski']

$person = [
 'imie' => 'Jan',
 'nazwisko' => 'Kowalski',
 'wiek' => '30',
 'kolor_oczu' => 'niebieski'
];

$fruits = array(
 "lemon",
 "orange",
 "banana",
 "apple"
);
$fruits = [
 "lemon",
 "orange",
 "banana",
 "apple"
]; 
//tablice możemy zadeklarować na kilka sposobów​

Object - zmienna o takim typie odwołuje  się do stworzonego i przypisanego obiektu PHP. W tym miejscu wspomnę, że obiekty oprócz właściwości (wartości), przechowują metody, które działają podobnie  jak function() w proceduralnym użyciu PHP.  Dla zobrazowania jaką rolę odgrywają metody prosty przykład pobierania dni wolnych poniżej. Oczywiście w normalnej aplikacji będzie to bardziej rozbudowane i będziemy komunikowali się z bazą danych, gdzie wszystkie dni wolne będą zapisywane oraz będzie sprawdzany szereg warunków, żeby nie przekroczyć ustalonych dni wolnych, dodatkowo każdy pracownik będzie miał te dni wolne inne, co spowodowane jest np. stażem pracy. 

<?php
class Employee {
    private $daysOff;
    private $allDaysOff = 26;
    public function getDaysLeft() {
        return $this->allDaysOff - $this->daysOff;
    }
    public function setUsedDaysOff($days) {
        $this->daysOff = $days;
    }
}
// tworzymy objekt
$employee = new Employee();
//ustawiamy wykorzystane dni urlopowe;
$employee->setUsedDaysOff(10);
//ustawiamy wykorzystane dni
echo $employee->getDaysLeft(); //
​

NULL - taki tym otrzymuje zmienna, której nie przypisano żadnej wartości lub przypisano wartość NULL. Ciekawostką jest, że null jest jedyną wartością, w której PHP nieuwzględniania wielkości liter,  jest to case-insensitive. Przypisując nawet wartość nUll, PHP zwróci nam NULL.

resource 

Typy danych w PHP opisałem szczegółowo w podlinkowanym artykule. 

Deklarowanie zmiennych w PHP

Jak zdążyłeś zauważyć w powyższych przykładach, każda nazwa zmiennej w PHP musi być poprzedzona znakiem $.

Dodatkowo:

  • Nazwa zmiennej musi zaczynać się od litery lub znaku podkreślenia.
  • Zmienna nie może zaczynać się od liczby. Kompilator nie przepuści nam zmiennych jak $1name = 'Daniel' i zwróci syntax error. 
  • W nazwach zmiennych rozróżniana jest wielkość liter ($name, $Name i $NAME to trzy zupełnie różne zmienne). Właściwość ta nazywa się case-sensitive.

Zmienne typowane dynamicznie 

Typ zmiennej w PHP określany jest dynamicznie w zależności od zawartości, czyli nie musimy (ale możemy) określać typu, jaki może być przechowywany w zmiennej. Do jednej zmiennej możemy przypisać najpierw wartość typu integer, a potem  w trakcie działania programu, bez wykonywania jawnej konwersji, wartość string i typ zmiennej zmieni się sam. 

[TYP] [NAZWA] = [WARTOSC];

W językach gdzie typowanie nie jest dynamiczne przeważnie deklaracja każdeej zmiennej wygląda według wzoru

Działanie takie ułatwia operacje na zmiennych na samym początku programowania, utrudnia natomiast kontrolę integralności kodu i program wraz z jego złożonością.  PHP7 ma na szczęście możliwość używania deklaracji typów w parametrach funkcji, metod oraz określania typów wartości zwracanej. Wraz z nabywaniem doświadczenie a pehapie będziesz chętnie używał tych funkcjonalności. Innym popularnym językiem stosującym typowanie dynamiczne jest JavaScript, a typowanie statyczne, czyli nadawanie typów zmiennym w czasie kompilacji programu mają takie języki jak Java, C czy C++.

Dynamiczna nazwa zmiennej w PHP

PHP pozwala nam na dynamiczne tworzenie nazwy zmiennej. Wygląda to następująco:

$foo= "lorem";
$$foo= "ipsum";
echo $foo.$$foo;  //loremipsum
echo $lorem; //ipsum

Jak wyświetlić zmienną w PHP? 

Zmienne skalarne najprawdopodobniej będziesz wyświetlał w swoich programach za pomocą funkcji echo

$name  = 'Jan Kowalski';
echo $name; //Jan Kowalski

Powinieneś zainteresować się ponadto funkcją printf(), która ułatwia formatowanie różnych typów danych.Funkcja print_r(), - pomoże Ci podejrzeć zmienne z typami złożonymi, np. wyświetlisz  w czytelny dla człowieka sposób tablicę bez konieczności iteracji przez wszystkie elementy, czy też funkcja var_dump(), która zrzuci dodatkowe informacje o zmiennej, czyli np. jej typ i ilość elementów.

$fruits = ['jabłko', 'banan', 'kiwi', 123];

print_r($fruits);

/*
Array
(
    [0] => jabłko
    [1] => banan
    [2] => kiwi
    [3] => 123
)
 */

var_dump($fruits);
/*
array(4) {
  [0] =>
  string(7) "jabłko"
  [1] =>
  string(5) "banan"
  [2] =>
  string(4) "kiwi"
  [3] =>
  int(123)
}
*/

Daliśmy radę ze zmiennymi w PHP, czas na stałe w PHP.