No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Reto: análisis de tipado en PHP

14/24
Recursos

Revisaremos el reto de la clase Qué es el Casting en PHP. Estaba dividido en 3 niveles y constaba en determinar los tipos de datos de una lista de variables.

Nivel Fácil

Los tipos de datos de este nivel son sencillos de determinar, puesto que son muy explícitos:

<?php
//Fácil
$nombre = "Carlos"; # String
$apellido = "Gómez"; # String
$edad = 18; # Integer
$aprobado = true; # Boolean

Nivel Medio

Tenemos las siguientes 3 variables:

<?php
//Medio
# 1.
$promedio = (8 + 9.5 + 9 + 10 + 8) / 5; # Decimal o Float
# 2.
$nombre_completo = $nombre . " " . $apellido; # String
# 3.
$presento_examen = (bool) 1; # Boolean
  1. Basta que haya un solo número decimal (9.5 en este caso) o alguna división (/5) en la operación para que se convierta la variable ($promedio) a tipo float.
  2. En esta concatenación las variables $nombre y $apellido son de tipo String al igual que la cadena que contiene un espacio (" ") por tanto, el tipo de dato final de la variable $nombre_completo es de tipo String.
  3. Explícitamente, nos dice que la variable $presento_examen es un integer que será convertido (casting) a tipo booleano.

Nivel Avanzado

Estos 4 casos poseen un poco más de dificultad:

<?php
//Avanzado
# 1.
$numero_preguntas = 5 + "5"; #Integer
# 2.
$numero_respuestas = "5" + 5; # Integer
# 3.
$promedio_maximo = $numero_respuestas / 1.0; # Decimal o Float
# 4.
$michis = 3 + "5 michis"; # Integer (con Warning)
  1. PHP, para hacer una operación matemática entre una cadena de caracteres y un número, convierte el String en integer siempre y cuando el valor entre las comillas sea solo un número o empiece con un número. Por tanto, el tipo de dato de $numero_preguntas será integer después de la suma (5 + 5 = 10).
  2. Es un caso igual al anterior con la diferencia que la suma empieza con la cadena de caracteres ("5"). La variable $numero_respuestas será de tipo integer, pues, la operación matemática es entre 2 integer.
  3. Nos encontramos ante una división, por lo tanto, el tipo de dato de la variable $promedio_maximo será convertido a float, pues, el intérprete de PHP no sabe cuantos decimales tendrá el resultado de esta división previo a realizar la operación, por ello realiza esa conversión.
  4. Caso particular que vimos en la clase de casting en la que descubrimos que PHP es capaz de efectuar este tipo de operaciones siempre y cuando el número dentro del String se encuentre al principio. Finalmente, al ser los 2 números a sumar de tipo integer (3 + 5 = 8), el tipo de dato de $michis será también integer. En este contexto siempre te mostrará un aviso (Warning).

Contribución creada por: Martín Álvarez.

Aportes 29

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Por cierto ¿Qué son los michis? 😃

michis

Para ir comenzando con PHP, las clases han sido muy buenas que he logrado entender hasta el momento todo lo mostrado.
Así me fue identificando los tipos de datos.
Solo que yo al Integer lo llame int pero de ahí en fuera todo bien 😃

Me adelanto por si a alguien le gusta el tema que estoy usando, es: SynthWave '84

Así quedo mi reto:

🤓 Les vengo a recomendar una extensión de VSCode que nos ayuda a correr varios lenguajes de programación en la misma salida del editor. Se llama Code Runner y la pueden descargar aquí en el Marketplace de VSC

Das click derecho en el editor de código o seleccionas la parte del código que quieres ejecutar, y presionas en Run code

Y verás la salida de texto en la parte posterior del editor.

Espero les haya servido.

<?php
//Fácil
$nombre = "Carlos"; //String
$apellido = "Gómez"; //String
$edad = 18; // int
$aprobado = true; // bool

//Medio
$promedio = (8 + 9.5 + 9 + 10 + 8) /5; //float
$nombre_completo = $nombre." ".$apellido; //string
$presento_examen = (bool)1; //bool(true)

//Avanzado
$numero_preguntas = 5+ "5"; //int(10)
$numero_respuestas = "5" + 5; //int(10)
$promedio_maximo = $numero_respuestas / 1.0; //float(10), solo porque se divide en 1.0, si fuera 1, sería int
$michis = 3 + "5 michis"; //int(8) (con Warning)


//testear resultados:
var_dump($promedio_maximo);

me ha gustado como explica este profe

Excelente Curso! 👏😀

si la division es entera , la variable es tipo int, sino , la variable es float
![](https://static.platzi.com/media/user_upload/image-3c7b598d-aac6-41c5-9516-23b7dddba3c3.jpg)![](https://static.platzi.com/media/user_upload/image-2cbd5fad-540e-4e60-a59a-9b586a994005.jpg)
$nombre = "Carlos"; //string $apellido = "Gómez"; //string $edad = 18; //int $aprobado = true; //bool //Medio $promedio = (8 + 9.5 + 9 + 10 + 8) / 5; //float $nombre\_completo = $nombre . " " . $apellido; //string $presento\_examen = (bool) 1; //bool //Avanzado $numero\_preguntas = 5 + "5"; //10 $numero\_respuestas = "5" + 5; //10 $promedio\_maximo = $numero\_respuestas / 1.0; //int $michis = 3 + "5 michis"; //8 pero con adevertencia.
Reto: ![](https://static.platzi.com/media/user_upload/image-dda04e3e-0820-4855-93ef-c0783de4e6ed.jpg)![](https://static.platzi.com/media/user_upload/image-e9ca91e3-b42a-4e29-be2f-669df4d8f1b9.jpg)![](https://static.platzi.com/media/user_upload/image-794e6744-7ebb-4df6-af76-76064462d07d.jpg)

Me salio todo bien 😃

```txt string(6) "Carlos" string(5) "gomez" int(18) bool(true) float(8.9) string(12) "Carlos gomez" bool(true) int(10) int(10) float(10) Warning: A non-numeric value encountered in C:\xampp\htdocs\reto.php on line 39 int(8) ```string(6) "Carlos"string(5) "gomez"int(18)bool(true)float(8.9)string(12) "Carlos gomez"bool(true)int(10)int(10)float(10) Warning: A non-numeric value encountered in C:\xampp\htdocs\reto.php on line 39int(8)

Como dato extra, si uno en $promedio_maximo en vez de poner 1.0, utiliza 1, la división da exacta y el valor es integer, php cuando obtiene valores enteros como respuesta de división los convierte a integer.

// en este ejemplo da el tipo de dato //
$nombre = “Carlos”;
var_dump ($nombre);
$apellido = “Gómez”;
var_dump ($apellido);
$edad = 18;
var_dump ($edad);
$aprobado = true;
var_dump ($aprobado);

//Medio

$promedio = (8 + 9.5 + 9 + 10 + 8) / 5;
var_dump($promedio);
$nombre_completo = $nombre . " " . $apellido;
var_dump($nombre_completo);
$presento_examen = (bool) 1;
var_dump($presento_examen);

//Avanzado
$numero_preguntas = 5 + “5”;
var_dump($numero_preguntas);
$numero_respuestas = “5” + 5;
var_dump($numero_respuestas);
$promedio_maximo = $numero_respuestas / 1.0;
var_dump($promedio_maximo);
$michis = 3 + “5 michis”;
var_dump($michis);

//RESPUESTAS
" string(6) “Carlos” string(6) “Gómez” int(18) bool(true) float(8.9) string(13) “Carlos Gómez” bool(true) int(10) int(10) float(10)
Warning: A non-numeric value encountered in
int(8) "

$nombre = ‘Carlos’;
$apellido = ‘Gomez’;
$edad = 18;
$aprodado = true;

echo var_dump($nombre);
echo var_dump($apellido."<br>");
echo var_dump($edad."<br>");
echo var_dump($aprodado."<br>") ;

echo “<hr>”;

$promedio = (8 + 9.5+9+10+8)/5;
$nombre_completo = $nombre . " ".$apellido;
$presento_examen = (bool) 1;

echo var_dump($promedio."<br>");
echo var_dump($nombre_completo."<br>");
echo var_dump($presento_examen."<br>");

// Termina:

string(6) “Carlos” string(9) “Gomez
” string(6) “18
” string(5) "1
"
string(7) “8.9
” string(16) “Carlos Gomez
” string(5) "1

Me fue super biennn🙂😄

Sin problemas por ahora 💚

El profe dice algo que no es del todo cierto, pero si es muy muy posible. Las divisiones si pueden dar int

$a = 9;
$b = 3;
$div = $a / $b;
var_dump($div);

//imprime: int(3)

Me parece mejor tener un operador de concatenación aparte, y no que sea el de suma.

De locos el tema de poder sumar un numero cualquiera con una cadena siempre y cuando esta posea un numero en ella

Gracias por dedicarle una clase al reto, en otros cursos ni siquiera dando respuestas de los retos:)

Dejo por acá mi solución al desafío.

<$nombre = "Carlos"; // String
$apellido = "Gómez"; // String
$edad = 18; // Integer
$aprobado = true // Boolean

$promedio =(8 + 9.5 + 9 + 10 + 8) / 5; // Float
$nombre_completo = $nombre . " " . $apellido; // String
$presento_examen = (bool) 1; // Boolean

$numero_preguntas = 5 + "5"; // Integer
$numero_respuestas = "5" + 5; // Integer
$promedio_maximo = $numero_respuestas / 1.0; // Float
$michis = 3 + "5 michis"; // Integer> 

ya no se cual es mi profe favorito de proge, si el o facundo


<?php

//Fácil

$nombre = "Carlos";
var_dump($nombre);
 echo"\n";

$apellido = "Gómez";
var_dump($apellido);
 echo"\n";

$edad = 18;
var_dump($edad);
 echo"\n";

$aprobado = true;
var_dump($aprobado);
 echo"\n";

//Medio

$promedio = (8 + 9.5 + 9 + 10 + 8) / 5;
var_dump($promedio);
 echo"\n";

$nombre_completo = $nombre . " " . $apellido;
var_dump($nombre_completo);
 echo"\n";
 
$presento_examen = (bool) 1;
 var_dump($presento_examen);
 echo"\n";
//Avanzado

$numero_preguntas = 5 + "5";

var_dump($numero_preguntas);
 echo"\n";

$numero_respuestas = "5" + 5;
var_dump($numero_respuestas);
 echo"\n";

$promedio_maximo = $numero_respuestas / 1.0;
var_dump($promedio_maximo);
 echo"\n";

$michis = 3 + "5 michis";
var_dump($michis);
 echo"\n";

?>

Para quien quiera probar
<?php
//Facil
$name = “Didier”; //String
$lastname = “Peña”; //String
$age = “23”; //Integer
$passed = true; //Boolean

//Medio
$average = (8 + 9.5 + 9 + 10 + 8) /5; //Decimal
$full_name = $name . " " . $lastname; //String
$submitted_exam = (bool) 1; //Boolean

//Avanzado
$number_questions = 5 + “5”; //Integer
$number_answers = “5” + 5; //Integer
$maximum_average = $number_answers / 2; //Decimal
$michis = 3 + “5 michis”; //Integer (with warning)

echo $name . “\n”;
echo $lastname . “\n”;
echo $age . “\n”;
echo $passed . “\n”;
echo $average . “\n”;
echo $full_name . “\n”;
echo $submitted_exam . “\n”;
echo $number_questions . “\n”;
echo $number_answers . “\n”;
echo $maximum_average . “\n”;
echo $michis . “\n”;