Zmienne pozwalają na definiowanie struktur danych. W języku PHP zmienna to symbol, któremu można przypisać pewną wartość. W PHP zmienne nie muszą być wcześniej deklarowane. Zostają utworzone i zdefiniowane przy pierwszym użyciu. Typ zmiennej określany jest w PHP w zależności od kontekstu, w jakim zmienna została użyta. Dlatego ważne jest, aby przemyśleć nazwy zmiennych i używać ich konsekwentnie.

Nazwa (identyfikator) zmiennej zaczyna się od $, po którym może być mała lub duża litera, znak podkreślenia, potem już dowolne małe i duże litery, cyfry, znaki podkreślenia.

Typy danych można podzielić na:
1. skalarne
a) boolean – typ logiczny, który może przyjmować wartości true lub false. Ten typ wykorzystuje się do konstruowania wyrażeń logicznych i sprawdzania warunków.
b) integer – typ całkowitoliczbowy, który reprezentuje dodatnie i ujemne liczby całkowite. Liczby mogą być zapisywane w formacie: dziesiętnym (domyślny), ósemkowym (0 przed liczbą) lub szesnastkowym (0x przed liczbą). Maksymalny zakres zależy od platformy sprzętowo-systemowej, na jakiej jest uruchamiane PHP. Np. dla 32 bitów zakres będzie od -2^31 do 2^31-1. W przypadku przekroczenia zakresu wartość staje się automatycznie typu float.
c) float – typ reprezentujący dodatnie i ujemne liczby rzeczywiste (zmiennoprzecinkowe, zmiennopozycyjne). Ich zakres jest zależny od platformy sprzętowo-systemowej, na której uruchamiany jest PHP. Najczęściej jest to przedział od -1,8*10^308 do 1,8*10^308. Są dwa sposoby reprezentacji. Pierwszy, najczęściej używany to zapis z kropką, np. 1.6 i drugi, notacja wykładnicza X.YeZ ( X.Y*10^Z), gdzie X to część całkowita, Y-dziesiętna, a Z to wykładnik potęgi liczby 10.
d) string – typ łańcuchowy, który służy do zapamiętywania sekwencji znaków. Nie ma ograniczenia długości tej sekwencji. Do zapamiętywania pojedynczego znaku wykorzystywany jest 1 bajt.
Łańcuch znaków można tworzyć na trzy sposoby:
-z użyciem znaków apostrofu, np. 'abc' – PHP praktycznie nie interpretuje takiego ciągu znaków. Jeśli  będziemy wyświetlać taki ciąg pojawi się on w niezmienionej postaci. Wyjątkiem jest specjalne traktowanie znaku apostrofu. Jeśli chcemy wyświetlić apostrof należy poprzedzić go znakiem \.
-z użyciem znaków cudzysłowu, np. „abc” - takie ciągi są interpretowane przez PHP. Jeśli w takiej sekwencji znajdzie się zmienna , zostanie ona zamieniona na wartość przez nią reprezentowaną.
-z użyciem składni heredoc – łańcuch znakowy należy rozpocząć od sekwencji <<<, po której musi być identyfikator (nazewnictwo jak przy nazwach zmiennych). Tego samego identyfikatora należy następnie użyć na końcu łańcucha znakowego. Linia kończąca nie może zawierać nic więcej niż identyfikator i średnik. 
Przykład:
$napis = <<<ID1
Napis
ID1;

2. złożone
a) array – typ tablicowy. Tablice to struktury danych przechowujące zbiór danych, zazwyczaj jednego typu, dostępne przez indeks. Tablice można tworzyć albo na bieżąco przypisując wartości dla poszczególnych indeksów albo za pomocą konstrukcji array(). Tablice mogą być jednowymiarowe (postać wektora) lub wielowymiarowe (zazwyczaj dwuwymiarowe). Tablice mogą być indeksowane kolejnymi nieujemnymi liczbami całkowitymi (tablice zwykłe) lub indeksowane kluczem, którym może być też ciąg znaków (tablice asocjacyjne).
Przykład tablicy zwykłej:
$tablica = array(wartość1, wartość2,..., wartośćN);
Przykład tablicy asocjacyjnej:
$tablica = array(
klucz1 => wartość1,
klucz2 => wartość2,
...
kluczN => wartośćN
);
b) object – typ obiektowy - służy do przechowywania obiektów.
3. specjalne
a) resource – wskazuje, że zmienna przechowuje odwołanie do zasobu zewnętrznego, np. bazy danych.
b) null – informuje o tym, że dana zmienna jest pusta.

Zmienne zmienne
Ponieważ zmienne w PHP tworzone są podczas ich pierwszego użycia, możliwe jest tworzenie zmiennych, których identyfikatorem będą wartości innych zmiennych.
Przykład:
$a=”darmowe”;
$$a=”dodatki”;
echo $a.$$a; //Wyświetli ”darmowe dodatki”

Zmienne predefiniowane
PHP udostępnia szereg zmiennych, dostępnych z każdego skryptu. Najważniejsze zmienne predefiniowane zostały zgromadzone w tzw. tablicach superglobalnych. Są to tablice asocjacyjne, indeksowane identyfikatorem zmiennej predefiniowanej.
Przykłady:
$_POST
Tablica zawierająca dane przekazane do serwera WWW za pomocą metody POST. 
$_SERVER
Jest to tablica zawierająca informacje ustawiane przez serwer WWW. Można z niej odczytać m.in. dane dotyczące połączenia, które wywołało dany skrypt, np. adres IP, port, wartości nagłówków HTTP itp. 

Pełna lista zmiennych predefiniowanych znajduje się w dokumentacji PHP (www.php.net).