Tipos de datos en PHP

Tipos de datos en PHP

Los tipos en PHP son una representación de los datos, ya que no requiere que las variables declaren su tipo, porque todos los tipos se convierten de forma automática

Tipo booleano

El tipo booleano simplemente distingue entre dos estados, un estado de éxito o de activado, valor verdadero, true, y un estado de fracaso o de desactivado, valor falso, false

Ambos estados no son susceptibles a mayúsculas y minúsculas

Normalmente, el resultado de operadores que devuelven un valor de tipo booleano son pasados a una estructura de control

Tipos numéricos

Los tipos numéricos los podemos dividir en reales y enteros

Tipo numérico entero

  • Integer

    enteros en base 10

    Tanto positivos como negativos

  • Hexadecimal

    enteros en base 16

    Se coloca antes del número en base 16 0x ó 0X

  • Octal

    enteros en base 8

    Colocamos un cero antes de dicho número en octal

  • Binario

    enteros en base 2

    Se coloca antes del número en base 2 0b ó 0B

Formalmente, la estructura de los literales de tipo entero es:

decimal : [1-9][0-9]* | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal : 0[0-7]+

binario : 0b[01]+

entero : [+-]?decimal | [+-]?hexadecimal | [+-]?octal | [+-]?binario

Tipo numérico real

Los reales se componen de una parte entera y otra fraccionaria separada por un punto de la anterior

La parte fraccionaria puede estar compuesta por un indicador de exponente E o e seguido de un número entero que indica el valor del exponente

Formalmente, la estructura de los literales de tipo real es:

LNUM : [0-9]+
DNUM : ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM : [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

  • Float

    es un valor numérico de coma flotante

    Tanto positivos como negativos

    Su tamaño depende de la plataforma, aunque su valor puede ser como máximo 1.8e308 aproximadamente, con una precisión cercana a los 14 dígitos decimales (formato de 64 bit del IEEE)

    Adicionalmente, los números racionales cuya representación en base 10 es igual a la empleada como número en coma flotante, como 0.1 o 0.7, no tienen una representación exacta como números de punto flotante en base 2, que es la base empleada internamente, sin importar el tamaño de la mantisa

    Por lo tanto, no se pueden convertir a binario sin una pequeña pérdida de precisión

    Pudiendo dar resultado a errores de precisión como por ejemplo, floor( (0.1 + 0.7) * 10); normalmente devolvería 8, sin embargo, nos devolverá 7, ya que en su representación interna será 7.9999999999999991118…

    Por tanto, no se recomienda confiar en los resultados con números en coma flotante y no utilizar la comparación de igualdad entre números de punto flotante directamente

    En caso de necesitar una mayor precisión, utiliza las funciones matemáticas de precisión arbitraria y las funciones de gmp

  • Double

    es equivalente al Float y no aporta diferencias sustanciales

    En otros lenguajes tiene doble precisión, pero en PHP se ha mantenido por motivos históricos y es aconsejabla usar mejor las funciones que trabajan con Float

  • NaN

    Algunas operaciones numéricas pueden resultar en un valor representado por la constante NAN

    Este resultado representa un valor no definido o no representable mediante cálculos de punto flotante

    Cualquier comparación, ya sea estricta o no, de este valor con cualquier otro valor, incluido él mismo, a excepción de TRUE, tendrá como resultado FALSE

    Ya que representa cualquier número de diferentes valores, no debería compararse con otros valores, incluido él mismo; en su lugar se debe comprobar usando la función is_nan()

Tipo string

Un string es una cadena de caracteres delimitadas por comillas

Donde cada carácter es un byte

Esto significa que PHP solo admite un conjunto de 256 caracteres, y de ahí que no ofrezca soporte nativo para Unicode

Un string sólo puede contener hasta 2 GB de tamaño (2147483647 bytes como máximo)

Un literal de tipo string se puede especificar de cuatro formas diferentes:

  • entrecomillado simple

    se especifican entre los carácteres de apertura y de cierre

    Para especificar una comilla simple literal, se ha de escapar con una barra invertida (\). Para especificar una barra invertida literal, se duplica (\\)

    Todas las demás instancias de barras invertidas serán tratadas como una barra invertida literal: esto significa que otras secuencias de escape que podrían utilizarse, tales como \r o \n, serán mostradas literalmente tal y como se especifican, en lugar de tener cualquier otro significado especial

    Hay que tener en cuenta que las variables y las sentencias de escape para caracteres especiales no se expandirán cuando estén incluidas dentro de un string entre comillas simples

  • entrecomillado doble

    se especifican entre los carácteres " de apertura y " de cierre

    La característica más importante del entrecomillado doble de un string es el hecho de que se expanden los nombres de las variables

    PHP interpretará las siguientes secuencias de escape como caracteres especiales:

    Código Descripción
    \n avance de línea (LF o 0x0A (10) en ASCII)
    \r retorno de carro (CR o 0x0D (13) en ASCII)
    \t tabulador horizontal (HT o 0x09 (9) en ASCII)
    \v tabulador vertical (VT o 0x0B (11) en ASCII) (desde PHP 5.2.5)
    \e escape (ESC o 0x1B (27) en ASCII) (desde PHP 5.4.4)
    \f avance de página (FF o 0x0C (12) en ASCII) (desde PHP 5.2.5)
    \\ barra invertida
    \$ signo de dólar
    \" comillas dobles
    \[0-7]{1,3} la secuencia de caracteres que coincida con la expresión regular es un carácter en notación octal, que silenciosamente desborda para encajar en un byte (p.ej. "\400" === "\000")
    \x[0-9A-Fa-f]{1,2} la secuencia de caracteres que coincida con la expresión regular es un carácter en notación hexadecimal
    \u{[0-9A-Fa-f]+} la secuencia de caracteres que coincida con la expresión regular es un punto de código de Unicode, la cual será imprimida al string como dicha representación UTF-8 del punto de código (añadido en PHP 7)

    Al igual que en el entrecomillado simple de un string, escapar cualquier otro carácter puede dar lugar a que se muestre también la barra invertida

    Antes de PHP 5.1.1, no se mostraba la barra invertida de \{$var}

  • sintaxis heredoc

    se especifican mediante el los carácteres <<< seguidos del operador EOT y finaliza con el operador EOT seguido del carácter ; de cierre

    El identificador de cierre debe empezar en la primera columna de la nueva línea

    Asimismo, el identificador debe seguir las mismas reglas de nomenclatura que las etiquetas en PHP: debe contener solo caracteres alfanuméricos y guiones bajos, y debe empezar con un carácter alfabético o un guión bajo

    Es muy importante señalar que la línea con el identificador de cierre no debe contener ningún otro carácter, excepto el punto y coma

    El identificador no debe estar sangrado, y que no debe existir ningún espacio ni tabulación antes o después del punto y coma

    El primer carácter antes del identificador de cierre debe ser un salto de línea definido por el sistema operativo local

    \n en los sistemas UNIX, incluyendo Mac OS X

    Además, al delimitador de cierre le ha de seguir también, el de nueva línea

    Si se rompe esta regla y el identificador de cierre no está limpio, no será considerado como un identificador de cierre, por lo que PHP continuará buscando uno

    Si no se encuentra ningún identificador de cierre apropiado antes del final del fichero, se producirá un error de análisis en la última línea

    No se puede emplear Heredoc para inicializar las propiedades de una clase

    Desde PHP 5.3, esta limitación es válida solamente para un heredoc que contenga variables, ya que es posible inicializar variables estáticas y propiedades / constantes de clase

    En esa versión también se introdujo la posibilidad de entrecomillar el identificador de apertura en Heredoc

  • sintaxis nowdoc (desde PHP 5.3)

    es a los string con comillas simples lo mismo que Heredoc lo es a los string con comillas dobles

    Un nowdoc se especifica de forma análoga a un heredoc, pero no se realiza ningún análisis dentro del nowdoc

    La construcción es ideal para embeber código PHP o grandes fragmentos de texto sin necesidad de escaparlos

    Comparte algunas características comunes con la construcción SGML, donde se declara un bloque de texto que no se analiza

    Un nowdoc se identifica con la misma secuencia empleada para heredoc, <<<, pero el identificador que le sigue está delimitado con comillas simples

    Todas las reglas para los identificadores de heredoc también son aplicables a los identificadores de nowdoc, especialmente aquellas que se refieren al empleo del identificador de cierre

Análisis de variables

Cuando un string es especificado mediante comillas dobles o mediante heredoc, las variables que haya dentro de dicho string se analizarán

Existen dos tipos de sintaxis:

  • simple

    es la más empleada y práctica

    Proporciona una forma de embeber una variable, un valor de un array o una propiedad de un object dentro de un string con el mínimo esfuerzo

  • compleja

    puede ser reconocida por las llaves que delimitan la expresión

Sintaxis simple

Si se encuentra un signo de dólar ($), el analizador tomará el mayor número de símbolos para formar un nombre de variable válido

Delimitar el nombre de la variable con llaves permite especificar explícitamente el final del nombre

De forma parecida, se puede analizar el índice de un array o la propiedad de un object

Con los índices de los arrays, el corchete de cierre (]) marca el final del índice

La misma regla se puede aplicar a las propiedades de los objetos y a las variables simples

Sintaxis compleja

Permite el empleo de expresiones complejas

Cualquier variable escalar, elemento de array o propiedad de objeto con una representación de tipo string puede ser incluido a través de esta sintaxis

Simplemente se escribe la expresión del mismo modo en que aparecería por fuera del string, delimitándola con { y }

Dado que { no puede ser escapado, esta sintaxis será reconocida únicamente cuando el $ siga inmediatamente al {

Utilice {\$ para obtener un {$ literal

Algunos ejemplos para que quede más claro:

Con esta sintaxis, también es posible acceder a las propiedades de una clase empleando variables dentro de un string

Las funciones, llamadas a métodos, variables de clase estáticas y constantes de clases dentro de {$} funcionan desde PHP 5

Sin embargo, el valor accedido puede ser interpretado como el nombre de la variable en el ámbito en el que está definido el string

El empleo de llaves simples ({}) no servirá para acceder al valor devuelto por las funciones o métodos, o los valores de las constantes de clase o variables de clase estáticas

Arrays

Un array en PHP es en realidad un mapa ordenado

Un mapa es un tipo de datos que asocia valores con claves

Este tipo se optimiza para varios usos diferentes; se puede emplear como un array, lista (vector), tabla asociativa (tabla hash – una implementación de un mapa), diccionario, colección, pila, cola, etc

Ya que los valores de un array pueden ser otros arrays, también son posibles árboles y arrays multidimensionales

Para crear un array se utiliza la siguiente sintaxis:

Donde tenemos la función array() que sirve de construcctor y toma como parámetros parejas clave/valor separadas por comas y unidas con los simbolos =>

La coma después del último elemento del array es opcional, pudiéndose omitirse

A partir de PHP 5.4 también se puede usar la sintaxis de array corta, la cual reemplaza la función array() con []

La clave puede ser un integer o un string

Además, las claves deberán cumplir:

  • Un strings que contenga un integer válido será amoldado al tipo integer

    La clave "8" en realidad será almacenada como 8

    "08" no será convertido, ya que no es un número integer decimal válido

  • Un float será forzado a integer, lo que significa que la parte decimal será eliminada

    La clave 8.7 en realidad será almacenada como 8

  • Un booleano será forzado a integer también, es decir, la clave true en realidad será almacenada como 1 y la clave false como 0
  • Un null será forzado a string vacío, es decir, la clave null en realidad será almacenada como ""
  • Los arrays y los objects no pueden utilizarse como claves

    Si lo hacemos, daremos lugar a una advertencia: Illegal offset type

  • Si varios elementos en la declaración del array usan la misma clave, sólo se utilizará la última, siendo los demás sobrescritos

La clave es opcional y si no se especifica, PHP usará el incremento de la clave de tipo integer mayor utilizada anteriormente

Es posible especificar la clave sólo para algunos elementos y excluir a los demás:

Los elementos de array se pueden acceder utilizando la sintaxis array[key]

Nota Tanto los corchetes como las llaves pueden ser utilizados de forma intercambiable para acceder a los elementos de un array ($array[42] y $array{42} tendrán el mismo resultado en el ejemplo anterior)

A partir de PHP 5.4 es posible hacer referencia al array del resultado de una llamada a una función o método directamente

En versiones anteriores sólo era posible utilizando una variable temporal

Desde PHP 5.5 es posible hacer referencia directa un elemento de un array literal

Nota Intentar acceder a una clave de un array que no se ha definido es lo mismo que el acceder a cualquier otra variable no definida: se emitirá un mensaje de error de nivel E_NOTICE, y el resultado será NULL

Un array existente puede ser modificado estableciendo explícitamente valores en él

Esto se realiza asignando valores al array, especificando la clave entre corchetes

Esta también se puede omitir, resultando en un par de corchetes vacíos ([])

Si $arr aún no existe, se creará, siendo también esta forma una alternativa de crear un array

Sin embargo, se desaconsejada esta práctica porque que si $arr ya contiene algún valor (un string de una variable de petición), este estará en su lugar y [] puede significar realmente el operador de acceso a cadenas

Siempre es mejor inicializar variables mediante una asignación directa

Para cambiar un valor determinado se debe asignar un nuevo valor a ese elemento empleando su clave

Para quitar una pareja clave/valor, se debe llamar a la función unset()

Iterables

Un Iterable es un seudotipo introducido en PHP 7.1

Acepta cualquier array u objeto que implemente la interfaz Traversable

Estos dos tipos se recorren con foreach y se pueden emplear con yield from dentro de un generador

Iterable se puede usar para indicar que una función requiere un conjunto de valores, pero que no importa la forma del conjunto ya que se utilizará con foreach

Si un valor no es un array o una instancia de Traversable, se lanzará un TypeError

Los parámetros declarados como iterable pueden usar NULL o un array como valor predeterminado

Objetos

Los objetos se componen de un conjunto de valores, propiedades y un conjunto de métodos aplicados a esos valores

Son estos métodos los que nos permiten modificar el estado de dicho objeto, es decir, el valor de sus propiedades

Vamos a crear un objeto Universitario de ejemplo en el que tendremos las propiedades: Nombre, Apellido, Edad y Dni

La instancia del objeto la crearemos mediante el operador new de la siguiente forma:

Es posible inicializar todas las variables para que tengan el tipo que queremos, para ello usaremos el constructor de la clase pasándole los argumentos que necesitemos

A partir de PHP 7 podemos especificar además el tipo del argumento

Mediante la palabra reservada $this podremos referenciar al objeto actual

Las propiedades de un objeto pueden describirse mediante otros objetos

La definición de métodos asociados a un objeto puede precisarse en la definición del objeto

Por ejemplo, para el objeto universitario definimos una función que muestre el nombre, edad, apellidos, dni y notas medias del alumno

Para acceder a las propiedades o a los métodos usaremos el operador ->

Recursos

Un valor tipo resource es una variable especial, que contiene una referencia a un recurso externo

Los recursos son creados y usados por funciones especiales

Puede obtenerse el tipo de recurso mediante la función get_resource_type()

Gracias al sistema de conteo de referencias introducido con el Motor Zend de PHP 4, un recurso que ya no es referenciado es detectado automáticamente y es liberado por el recolector de basura

Por esta razón, rara vez se necesita liberar la memoria manualmente

Nota Los enlaces persistentes con bases de datos son una excepción a esta regla

No son destruidos por el recolector de basura, al ser conexiones persistentes

Valor nulo

En PHP a las variables se les puede asignar un valor que indica el valor vacío, este valor es el valor NULL

Una variable es considerada NULL si:

  • se le ha asignado la constante NULL
  • no se le ha asignado un valor todavía
  • se ha destruido con la función unset()

La constante NULL es insensible a mayúsculas o minúsculas

La conversión de tipos de datos

Antes que nada, recordar que PHP no necesita declaración de tipos

El contenido de la variable se convertirá automáticamente en el transcurso del programa según su uso

El esquema de conversión del tipo se basa en el principio siguiente: el tipo asociado corresponde al del operando de la izquierda

Esto se debe a que la evaluación se realiza de izquierda a derecha

La primera expresión convertirá la variable $un_numero en una cadena de caracteres porque el operando de la izquierda $una_string es una cadena de caracteres

Esta expresión concatena las dos cadenas de caracteres y el resultado de x es: "742"

Por el contrario, la segunda expresión convierte la cadena $una_string en un valor numérico porque el operando de la izquierda $un_numero, es un número

Esta segunda expresión suma los dos números y el resultado de y es: 49

La conversión de tipos no puede hacerse en todos los casos posibles: ciertas cadenas de caracteres no pueden convertirse en número

Tales conversiones generan un error

El comportamiento de la conversión automática en array está actualmente sin definir

Debido a que PHP soporta el indexado de string mediante compensaciones mediante la misma sintaxis empleada en el indexado de arrays, los siguientes ejemplos son válidos para todas las versiones de PHP:

Forzado de tipos

El forzado de tipos (casting) en PHP funciona de la misma manera que en C, donde el nombre del tipo deseado se escribe entre paréntesis antes de la variable que se quiera forzar

Tipo Forzado
(int), (integer) integer
(bool), (boolean) boolean
(float), (double), (real) float
(string) string
(array) array
(object) object
(unset) NULL (añadido en PHP 5)
(binary) y prefijo b string binario (añadido en PHP 5.2.1)

Se permiten las tabulaciones y espacios dentro de los paréntesis, por lo que los siguientes ejemplos son funcionalmente equivalentes:

Ejemplo de forzado literal de strings y variables a strings binarios

Las comillas dobles permiten evitar forzar una variable a string, ya que el resultado es equivalente

Conversión a booleano

Para convertir explícitamente un valor al tipo boolean, use el forzado de tipo (bool) o (boolean)

Sin embargo, en la mayoría de casos es innecesario, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento de tipo boolean

Un valor también puede ser convertido al tipo boolean mediante la función boolval()

Cuando se realizan conversiones a boolean, los siguientes valores se consideran FALSE:

  • el boolean FALSE
  • el integer 0 (cero)
  • el float 0.0 (cero)
  • el valor string vacío, y el string "0"
  • un array con cero elementos
  • un object con cero variables miembro (sólo en PHP 4)
  • el tipo especial NULL (incluidas variables no establecidas)
  • objetos SimpleXML creados desde etiquetas vacías

Cualquier otro valor se considera como TRUE (incluso una variable resource)

Nota: -1 se considera TRUE, como cualquier otro número distinto de cero (ya sea negativo o positivo)

Conversión a números enteros

Para convertir explícitamente un valor al tipo integer, use el forzado de tipo (int) o (integer)

Sin embargo, en la mayoría de casos es innecesario, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento de tipo integer

Un valor también puede ser convertido al tipo integer mediante la función intval()

Si un resource es convertido a integer, el resultado será el número de recurso único asignado al resource por PHP durante la ejecución

Desde booleanos

FALSE producirá 0 (cero), y TRUE producirá 1 (uno)

Desde números de punto flotante

Cuando se convierte un float a un integer, el número será redondeado hacia cero

Si el valor de tipo float esta por debajo de los límites de un integer (normalmente +/- 2.15e+9 = 2^31 en plataformas de 32 bits y +/- 9.22e+18 = 2^63 en plataformas de 64 bits distintas de Windows), el resultado es indefinido, debido a que float no tiene la precisión suficiente para ofrecer el resultado como un integer exacto

No se mostrará ninguna advertencia, ni siquiera un aviso, cuando esto ocurra

Nota A partir de PHP 7, en lugar de ser indefinidos y dependientes de la plataforma, NaN e Infinity siempre serán cero al forzar el tipo a integer

Nota Nunca se debe convertir una fracción desconocida a un integer, ya que a veces puede conducir a resultados inesperados

Desde cadenas de caracteres

Si el string no contiene ninguno de los caracteres ‘.’, ‘e’, o ‘E’, y el valor numérico está entre los límites del tipo integer (tal como está definido por PHP_INT_MAX), el string será evaluado como un integer

En todos los demás casos será evaluado como un float

El valor es dado por la parte inicial del string

Si el string empieza con un dato numérico válido, éste será el valor empleado

De lo contrario, el valor será 0 (cero)

Un dato numérico válido es un signo opcional, seguido de uno o más dígitos

No espere obtener el código de un carácter convirtiéndolo a integer, como ocurre en C

Emplee las funciones ord() y chr() para convertir los carácteres a su código ASCII

Desde otros tipos

El comportamiento de la conversión de integer a otros tipos es indefinido

No confíe en ningún comportamiento observado, ya que puede cambiar sin previo aviso

Conversión a número de punto flotante

Para convertir explícitamente un valor al tipo float, use el forzado de tipo (float) o (double) o(real)

Sin embargo, en la mayoría de casos es innecesario, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento de tipo float

Un valor también puede ser convertido al tipo float mediante la función floatval()

Desde cadenas de caracteres

Si el string no contiene ninguno de los caracteres ‘.’, ‘e’, o ‘E’, y el valor numérico está entre los límites del tipo integer (tal como está definido por PHP_INT_MAX), el string será evaluado como un integer

En todos los demás casos será evaluado como un float

El valor es dado por la parte inicial del string

Si el string empieza con un dato numérico válido, éste será el valor empleado

De lo contrario, el valor será 0 (cero)

Un dato numérico válido es un signo opcional, seguido de uno o más dígitos (opcionalmente puede contener un punto decimal), seguido de un exponente opcional

El exponente es una ‘e’ o ‘E’ seguido de uno o más dígitos

Desde otros tipos

La conversión es la misma que si el valor hubiese sido convertido primero a integer y luego a float

A partir de PHP 5, se genera un aviso si se intenta convertir un object a float

Conversión a cadena

Para convertir explícitamente un valor al tipo string, use el forzado de tipo (string)

Sin embargo, en la mayoría de casos es innecesario, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento de tipo string

Un valor también puede ser convertido al tipo string mediante la función strval()

También hay una conversión automática cuando se utilizan las funciones de visualización echo o print

Desde booleanos

El valor TRUE del tipo boolean es convertido al string "1"
El valor FALSE del tipo boolean es convertido al string "" (el string vacío)

Esto permite la conversión en ambos sentidos entre los valores de los tipos boolean y string

Desde números

Un integer o float es convertido a un string que representa textualmente el número (incluyendo la parte exponencial para los float)

Los números de punto flotante pueden ser convertidos mediante la notación exponencial (por ejemplo 4.1E+6)

Nota El carácter para el punto decimal se define en la variable locale del script (categoría LC_NUMERIC). Consulte la función setlocale()

Desde arrays

Los arrays siempre son convertidos al string "Array"

Por esta razón, echo y print no pueden por sí mismos mostrar el contenido de un array

Para ver un único elemento individualmente, utilice una construcción como echo $arr[‘foo’]

Puede utilizar la función print_r para realizar la conversión y visualizar el contenido del array completo

Desde object

Los object desde PHP 4 siempre son convertidos al string "Object"

Para obtener el nombre de la clase de un objeto, emplee la función get_class()

A partir de PHP 5, se puede emplear el método __toString cuando sea relevante

Puede utilizar las funciones print_r o var_dump() para ver medios más efectivos de inspeccionar el contenido de estos tipos

Desde resource

Un resource siempre es convertido a string con la estructura "Resource id #1", donde 1 es el número de recurso asignado al resource por PHP durante la ejecución

A pesar de que no se debe depender de la estructura exacta, debido a que está sujeta a cambios durante la ejecución, siempre será única para un recurso dado dentro del tiempo de vida de ese script en ejecución (es decir, una petición web o proceso CLI), por lo que no será reutilizada

Para obtener el tipo de un resource, emplee la función get_resource_type()

Puede utilizar las funciones print_r o var_dump() para ver medios más efectivos de inspeccionar el contenido de estos tipos

Desde NULL

NULL siempre es convertido a un string vacío ""

Desde otros tipos

La mayoría de los valores de PHP pueden ser convertidos a un string para su almacenamiento permanente

A este método se le denomina serialización, y es realizado mediante la función serialize()

Como el motor de PHP se construyó con soporte para WDDX, los valores de PHP también pueden ser serializados como texto XML bien formado

Conversión a array

Desde object

Si convierte un object a un array, el resultado es un array cuyos elementos son las propiedades del object

Las claves son los nombres de las variables miembro, con algunas excepciones notables: las variables privadas tienen el nombre de la clase al comienzo del nombre de la variable; las variables protegidas tienen un caracter ‘*’ al comienzo del nombre de la variable

Estos valores adicionados al inicio tienen bytes nulos a los lados

Esto puede dar en algunos comportamientos inesperados:

Desde NULL

Si convierte un valor NULL a array, obtiene un array vacío

Desde otros tipos

Para cualquiera de los tipos: integer, float, string, boolean y resource, convertir un valor a un array resulta en un array con un solo elemento, con índice 0, y el valor del escalar que fue convertido

En otras palabras, (array) $scalarValue es exactamente lo mismo que array($scalarValue)

Conversión a object

Si un object se convierte en un object, éste no se modifica

Desde otros tipos

Si un valor de cualquier otro tipo se convierte en un object, se crea una nueva instancia de la clase stdClass incorporada

Si el valor es NULL, la nueva instancia estará vacía

Un array se convierte en un object con las propiedades nombradas como claves y los valores correspondientes, con la excepción de las claves numéricas, las cuales serán inaccesibles a menos que sean recorridas

Conversión a recurso

Dado que las variables resource contienen gestores especiales a archivos abiertos, conexiones con bases de datos, áreas gráficas para imágenes y cosas por el estilo, la conversión a tipo resource carece de sentido

Conversión a NULL

Nota Esta característica ha sido declarada obsoleta a partir de PHP 7.2 y su uso está totalmente desaconsejado

Convertir una variable a null usando (unset) $var no eliminará la variable ni destruirá su valor

Sólo retornará un valor NULL