PHP verwendet ein nominales Typsystem mit einer starken verhaltenbasierten Subtypisierungsbeziehung. Die Subtypisierungsbeziehung wird zur Kompilierzeit überprüft, während die Überprüfung der Typen dynamisch zur Laufzeit erfolgt.
Das PHP-Typsystem unterstützt verschiedene atomare Typen, die zusammengesetzt werden können, um komplexere Typen zu erzeugen. Einige dieser Typen können als Typendeklaration geschrieben werden.
Manche atomare Typen sind eingebaute Typen, die fest in die Sprache integriert sind und nicht durch benutzerdefinierte Typen reproduziert werden können.
Liste der Basistypen:
    Mit Schnittstellen,
    Klassen und
    Aufzählungen können
    benutzerdefinierte Typen erstellt werden.
    Diese werden als benutzerdefinierte Typen oder Klassentypen bezeichnet.
    So kann beispielsweise eine Klasse namens Elefant
    definiert werden, aus der Objekte vom Typ Elefant
    instanziiert werden. Eine Funktion kann dann einen Parameter vom Typ
    Elefant anfordern.
   
Es ist möglich, mehrere atomare Typen zu zusammengefassten Typen zu kombinieren. In PHP können Typen auf folgende Weise kombiniert werden:
    Ein Schnittmengentyp akzeptiert Werte, die mehrere Klassentyp-Deklarationen
    erfüllen, anstatt nur einer. Die einzelnen Typen, die den Schnittmengentyp
    bilden, werden durch das Symbol & verbunden. Daher
    wird ein Schnittmengentyp, der aus den Typen T,
    U und V besteht, als
    T&U&V geschrieben.
   
    Ein Union-Typ akzeptiert die Werte mehrerer verschiedener Typen und nicht
    nur eines einzigen. Die einzelnen Typen, die den Union-Typ bilden, werden
    durch das Symbol | verbunden. Daher wird ein Union-Typ,
    der aus den Typen T, U und
    V besteht, als T|U|V geschrieben.
    Wenn einer der Typen ein Schnittmengentyp ist, muss er in Klammern gesetzt
    werden, damit er in DNF geschrieben werden kann:
    T|(X&Y).
   
