PHP es un lenguaje débilmente tipado, aunque en la versión 7 incorporó la revisión de tipos en las funciones el lenguaje en sí lo sigue siendo.
Una de las ventajas de esto es que podemos castear o cambiar el tipo de una variable sin dificultad.
Lo que nos reúne hoy aquí son dos funciones que…
Dichas funciones son intval
y strval
La función intval
en PHP recibe un argumento de cualquier tipo y devuelve su representación como entero.
Su uso más frecuente es cuando queremos convertir una cadena a un entero:
<?php
$cadena = "123";
$entero = intval($cadena); #Ahora $entero es un verdadero entero
A lo que regresa ya podemos sumarle o restarle cosas, o hacerle cualquier operación matemática, pues tenemos la certeza de que es un entero.
Con esta función igualmente podemos quitar los decimales de un número (como lo hicimos con JavaScript). Llamamos a la función y le pasamos un flotante.
<?php
$flotante = 2.999;
$sinDecimales = intval($flotante);
echo $sinDecimales; # Imprime 2
La salida es 2. No importa si el número es 2.9 o 2.1, lo devuelve sin decimales. Incluso con 2.0001 devuelve 2.
Dado que intval
devuelve la representación entera de un número, y como segundo argumento recibe la base, podemos fácilmente llamarlo para que convierta un número binario a un decimal. Quedaría así:
<?php
$binario = "1101"; # El 13 en binario
# Con el 2 indicamos que la cadena que le pasamos está en base 2
$decimal = intval($binario, 2);
echo $decimal; # Imprime 13
La salida sería 13. Así de fácil sería convertir un binario a un decimal; es decir, un número en base 2 a base 10.
Este método es más fácil de explicar. Lo único que hace es obtener la representación de una variable, pero como string. Veamos esto:
<?php
$entero = 15000;
$string = strval($entero);
echo $string;
Lo que devuelve strval
es una cadena a la cual podemos aplicarle los métodos de cadenas, y podremos estar seguros de que estamos trabajando con un string para evitar comportamientos raros.
Esta función no imprime arreglos, regresará simplemente la cadena “Array” o en versiones nuevas generará un error de que estamos intentando convertir un array a una cadena.
Si realmente queremos imprimir un arreglo usamos print_r
:
<?php
$arreglo = array(1, 2, 3);
print_r($arreglo);
?>
La salida es esta:
La función strval
, al usarla en objetos, llamará al método __toString
del mismo. Si no lo implementa, regresará la cadena “Object” o generará un error en las versiones más nuevas.
Para implementar el método __toString
en un objeto podemos declararlo en la clase:
<?php
class Mascota{
var $nombre;
public function __construct($nombre){
$this->nombre = $nombre;
}
public function ladrar(){
echo "¡Guau!";
}
public function __toString(){
return "Soy de la clase mascota. Mi nombre es " . $this->nombre;
}
}
Ahí tenemos a la clase mascota que únicamente tiene la propiedad nombre y el método ladrar, aunque eso no es lo importante; lo que importa es que implementa el método __toString
.
Podemos implementarlo como queramos, siempre y cuando regrese una cadena. Por cierto, se recomienda devolver el estado de la mascota; es decir, concatenar todas sus variables.
El punto es que al llamar a strval
y pasarle nuestra mascota así:
<?php
class Mascota{
var $nombre;
public function __construct($nombre){
$this->nombre = $nombre;
}
public function ladrar(){
echo "¡Guau!";
}
public function __toString(){
return "Soy de la clase mascota. Mi nombre es " . $this->nombre;
}
}
$maggie = new Mascota("Maggie");
echo strval($maggie);
?>
El resultado no es “Object” ni un error, es:
Soy de la clase mascota. Mi nombre es Maggie
También existen las funciones floatval y boolval para convertir variables a flotantes y booleanos respectivamente.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios