Comportamiento extraño con números que tienen un cero inicial

Tengo un código PHP con algunos enteros y todo funciona bien, excepto cuando tengo 08 o 0X como número entero. Todo funciona bien cuando los incluyo.

Números de ejemplo:

 2 //Works fine 08 //Doesn't work 012 //Doesn't work "08" //Works fine again "012" //Works fine again 

¿Alguien puede decirme el motivo detrás de esto?

Si simplemente escribe 08 y 09 (sin comillas) o cualquier otro numérico con un 0 inicial, PHP cree que está escribiendo un valor octal, y 08 y 09 son números octales no válidos.

http://www.php.net/manual/en/language.types.integer.php

Sintaxis

Los enteros pueden especificarse en notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2), opcionalmente precedida por un signo (- o +).

Los literales enteros binarios están disponibles desde PHP 5.4.0.

Para usar la notación octal , preceda el número con un 0 (cero). Para usar la notación hexadecimal precede el número con 0x . Para usar la notación binaria precede el número con 0b .

[…]

Advertencia: antes de PHP 7, si un dígito no válido se daba en un entero octal (es decir, 8 o 9), el rest del número se ignoraba. Desde PHP 7, se emite un error de análisis.