PHP+QB est une machine virtuelle alternative pour PHP qui revendique des gains de performance d'un ordre de grandeur supérieur. Le revers de la médaille est qu'elle nécessite que tout soit typé statiquement, et des limitations sévères sont imposées aux tableaux.
Les déclarations de types statiques sont ajoutées via une extension de la syntaxe PHPDoc. Les méthodes sont annotées avec “@engine qb” pour indiquer qu'elles devraient être exécutées sur la VM PHP+QB. Ensuite il faut annoter du type de retour, les paramètres, et les variables globales avec la syntaxe PHPDoc normale. Les variables locales sont déclarées avec @local.
Les tableaux dans PHP+QB ne sont pas comme les tableaux PHP normaux. Extrait de la documentation:
Les tableaux en PHP sont des conteneurs de données sophistiqués. On peut mettre n'importe quoi dedans. Les éléments peuvent être référencés par du texte ou un nombre. Différents éléments pourraient en fait être le même objet. Un tableau peut même se contenir lui-même. Des structures très compliquées et utiles peuvent être construites à partir de tableaux PHP. Ce pouvoir et cette flexibilité ne sont cependant pas gratuits. Le sur-coût en termes de performances et de consommation de mémoire pourrait devenir insupportablement élevé lorsque l'on travaille avec des millions d'éléments.
Les tableaux PHP+QB sont extrêmement simples en comparaison. Ils sont ce qu'on appelle communément des C-arrays. Fondamentalement, un tableau en PHP+QB n'est qu'un blob en mémoire. Ses éléments sont simplement stockés les uns après les autres. On ne peut accéder aux éléments que par un indice numérique. L'ordre d'insertion n'a pas non-plus d'importance en PHP+QB, contrairement à du PHP ordinaire. $array[0] viendra toujours avant $array[1] dans une boucle foreach en PHP+QB.
Les tableaux PHP+QB sont de taille fixe ou expansible. Les tableaux expansibles ne se réduisent pas automatiquement lorsque des éléments sont retirés, pour ça il faut appeler unset().
Le moteur supporte toute la palette de types entiers signés ou non-signés ainsi que les nombres réels 32 et 64 bits. Les chaînes de caractères sont représentées par un tableau d'entiers. Les objets ne sont pas supportés, bien que les méthodes annotées pour PHP+QB auront toujours accès aux attributs de la variable $this.