logo

midulive


Transcribed podcasts: 605
Time transcribed: 13d 3h 7m 36s

This graph shows how many times the word ______ has been mentioned throughout the history of the program.

¡Muy buenas tardes! ¿Qué tal? Bienvenido, bienvenida. Espero que estés súper bien, con mucha alegría, mucha energía y con ganas, con ganas del curso de PHP, porque tenemos curso de PHP, un lenguaje, ya sabéis, odiado por mucha gente, pero amado también por otra.
Ya sabéis, el lenguaje de servidor, que renderizan el servidor más utilizado en Internet. Puede ser que por culpa de WordPress, quien sabe, pero queramos o no, ahí tiene un pedazo de hueco en nuestros corazones de las tres W. Así que yo creo que es un lenguaje muy interesante para aprender y si por lo que sea te perdiste el primer vídeo, pues que sepas que puedes ir a verlo, ¿vale?
Entonces ya sabéis que estoy haciendo el curso de PHP para ver si os interesa. Si os interesa, lo seguiré. Si no os interesa, pues seguramente no lo seguiremos, lo dejaremos ahí muerto y ya está.
O lo haremos en la plataforma de... a lo mejor lo pasamos a la plataforma esa de pago que os dije. Pero si os perdiste es el primero donde dijimos por qué aprender PHP, cómo empezar con PHP, cómo instalar PHP, qué es PHP, más allá de que sea un lenguaje que tiene tipado débil, dinámico.
Es interesante PHP y hoy lo vamos a ver porque tiene tipado débil, tipado dinámico, pero también tiene, ¿cómo diríamos esto? Tipado granular, no, no es granular.
Sería, joder, algo que es iterativo. ¿Iterativo? Podríamos decir que PHP tiene tipado iterativo. No es tipado iterativo, tampoco es. Joder, ¿cómo es? Gradual.
Joder, no me salía la palabra. Me ha salido granular y no salía gradual. Gradual. Eso es interesante porque no todos los lenguajes de programación tienen tipado gradual.
Gracias por la palabra, ¿eh? Gradual. Es curioso eso. Poder tener un tipado estático gradual. ¿Esto qué quiere decir? Pues que no necesitáis tipar vuestro código desde el principio,
pero luego lo podéis hacer poco a poco. Hoy lo vamos a ver porque es muy interesante. Hoy vamos a ver funciones, vamos a ver clases, vamos a ver cómo podéis hacer imports,
cómo hacer módulos, entre comillas, que vais a ver que en PHP no existen los módulos. Esto es interesante. O sea, existen cosas similares como pueden ser namespaces,
pero es curioso, ¿no? El cómo funciona realmente cuando tú tienes archivos y quieres compartir esa funcionalidad dentro de tu aplicación.
Lo vamos a ver porque hay que tener bastante cuidado con esto, ¿vale? ¿Y esto lo arreglarán? No sé si lo arreglarán.
Han arreglado bastantes cosas. PHP 8 trae muchas novedades y hoy vamos a ver una muy, muy interesante, ¿vale?
Pero si queréis ver la primera clase que hicimos, que sepáis que lo tenéis ya en YouTube, ¿vale? Que es una horita y lo tenéis por aquí.
Así que os dejo por aquí, lo os dejo por ahí. Mira, ya lo ha dejado el bueno de Feral para que lo tengáis.
Y ahí pues podéis ver todo lo que hicimos, cómo crear una variable. Hicimos hasta un despliegue a producción, ¿eh?
Hicimos hasta un despliegue a producción, cómo hacer arrays, cómo hacer match pattern, un montón de cosas, ¿vale?
Hicimos una pequeña aplicación y todo. Y hoy esa aplicación, la idea es pues intentar remozarla, mejorarla.
Mejorarla en cuanto al código, porque el código que hicimos no está mal. De hecho, lo puedes ver aquí.
No hicimos un mal código tampoco, pero tampoco es un código que diríamos que sería para estar muy orgullosos.
Más que nada porque se mezcla todo. Aquí podemos ver cómo estamos haciendo una llamada a una API.
Podemos ver cómo estamos pintando con el HTML aquí en el mismo archivo, cómo estamos renderizando todo.
Y entonces hoy, y porque me parece muy interesante para aprender realmente las cosas, vamos a hacer como un sistema de plantillas nuestro.
Muy fácil. Vas a ver que es muy fácil. Lo vas a poder seguir súper fácil.
Y es interesante porque lo creamos nosotros, ¿vale? No vamos a utilizar dependencias.
Todo lo que vamos a ver en el curso lo vamos a hacer nosotros desde cero.
Y vas a ver qué fácil es conseguirlo con PHP para separar tus archivos.
Y en lugar de tenerlo todo, todo mezclado aquí, ves que aquí lo tenemos como todo mezclado, ¿no?
Que metemos aquí la imagen y aquí en mitad el source, donde está evaluando lo que tenemos en el data, no sé qué.
Pues todo esto lo vamos a separar mucho mejor, ¿eh?
Vamos con ese PHP a darle a las manitas.
Y si nos interesa, seguir con el curso.
Buenísimo.
MVC, que dice Valnav, lo veríamos mucho más adelante, ¿eh?
Porque, hombre, hoy ver MVC así de la nada.
Pero sí que vamos a ver funciones, vamos a ver clases.
Y con las clases sí que vamos a ver cosas bastante interesantes.
Así que, nada.
Además, yo creo que hay cosas de hoy que vais a poder llevar a cualquier otro lenguaje de programación,
en el caso que lo estéis aprendiendo.
Bueno, pues aquí lo dejamos, ¿vale?
Aquí dejamos la semana pasada el curso de PHP.
Hicimos constantes, variables, llamadas a APIs, que hoy veremos cómo hacerlo mucho más fácil.
Lo comentamos la semana pasada, pero ya os dije que queríamos hacer este, solo para comentarlo.
La forma más fácil es esta, que es la que vamos a utilizar a partir de ahora,
porque no necesitamos la complicada.
De hecho, mira, la voy a hacer ya.
Pero antes, vamos a levantar el entorno de desarrollo, ¿vale?
PHP menos S, localhost, 2.8000.
Fijaos que PHP ya tiene un entorno web de desarrollo,
que mucha gente se dice, no, es que con PHP hay que hacer no sé qué.
Y no necesitas muchas veces instalar más cosas que PHP.
PHP ya tiene un entorno web de desarrollo que lo puedes levantar con un solo comando,
que es este de aquí.
Y esto en el puerto 8000, ya, te pone la página web, que debería ser esta,
que es la página que hicimos, que hicimos juntos.
Esta es la página que hicimos juntos y que desplegamos a producción y todo, ¿vale?
Bueno, pues ahora, para hacer la API, que ahora lo estamos haciendo,
como puedes ver, una sesión con el cliente de Curl y todo esto,
era complejo, pero es interesante, porque con esta versión de Curl,
lo que se puede hacer, aparte de cambiar cabeceras, configurar y un montón de cosas,
lo interesante es que también puedes hacer otros métodos, como post, put, delete y todo esto.
Se pueden instalar dependencias para lograrlo, que te lo facilita mucho,
pero ya os dije que el curso, la idea es no ver dependencias hasta que no pase mucho tiempo
o pasemos al Arable y cositas así, ¿vale?
Entonces, todo esto que hacíamos aquí se puede hacer de una forma mucho más sencilla
para no tener que hacer todo esto, que es esta de aquí.
Que si lo único que vais a hacer es un get y lo vais a hacer a un JSON
y no le tenéis que pasar absolutamente nada, bueno, si hacéis un get,
se lo podéis pasar ya en los query params, ¿vale?
Aquí le podríais pasar, por ejemplo, query params, sin ningún problema.
Pues una cosa que podéis hacer es el file get contents
y directamente le pasáis aquí la URL de la API, ¿vale?
Esto solo haría un get, no estaría haciendo un post, ni un put, ni nada,
solo sería para un get, pero esto funcionaría exactamente igual.
Fíjate que si refresco, ¿vale?
Pues me deja fatal porque hemos petado este.
Claro, esto yo no lo estoy utilizando y por eso se queja,
porque he dejado una variable que no estamos utilizando, ¿vale?
Pero fíjate que lo demás sí que funciona correctamente igual.
Esta sería la forma corta y seguramente la más idónea muchas veces
si lo que queréis es hacer simplemente un get a una API, ¿vale?
En una línea y luego lo que tenemos que hacer es decodificar,
porque esto lo que te devuelve, obviamente,
sería el resultado como en crudo, la cadena de texto,
pero no te devuelve un objeto JSON.
Y lo que queremos es que lo podamos convertir
a un array asociativo de PHP para poder acceder a estos datos.
Esto ahora lo pasaremos a funciones y todo esto
y creo que estará bastante bien.
Entonces, la constante, pues es eso,
porque podemos tener constantes, esto lo vimos la semana pasada,
y ya aquí lo que estamos haciendo es renderizar el HTML
como si no hubiera un mañana.
Lo estábamos escupiendo aquí en medio como si nada, ¿vale?
Esto hoy lo vamos a arreglar y lo vamos a dividir mucho mejor, ¿ok?
Entonces, primera cosa que podemos hacer,
hombre, funciones.
Aquí esto no está mal, esto de file get contents y tal,
lo tenemos ahí en medio, pero es posible que queramos tenerlo
en una función que sea reutilizable.
Lo que vamos a hacer en este caso,
vamos a poner aquí una función, le vamos a llamar get data.
Una cosa interesante, y aquí cada uno, pues que haga lo que quiera, ¿vale?
Pero os explico una cosa de una convención en PHP.
Si os fijáis, en PHP estamos utilizando aquí
lo que se le llamaría snake case, ¿vale?
Se llama snake case, snake case, es este,
que es como c-snake, porque si te fijas,
la barra, o sea, el guión bajo es como una serpiente.
Esa es la diferencia con kebab case,
que si te fijas, es el kebab, ¿no hay kebab?
Hostia, pensaba que había un emoji de kebab.
Bueno, pues el taco, ¿vale?
El kebab case es un guión aquí, por eso se llama kebab case,
porque se supone, no sé por qué,
no sé por qué se llama kebab case, la verdad,
pero el snake case sí que tiene sentido.
El tema, ¿por qué te explico esto?
Te explico esto porque los métodos de PHP,
fíjate, los nativos,
utilizan el snake case.
Entonces, la convención, normalmente,
que aquí cada uno haga lo que le da la gana,
pero normalmente sería seguir utilizando el snake case, ¿vale?
Por eso yo voy a utilizar esto,
pero no está, no hay ningún problema utilizar el camel case, ¿vale?
Camel case, este es camel case,
que este sí que te puedes imaginar por qué, ¿no?
Porque el camello como que está abajo,
pero sube, baja, sube, tal.
Entonces, el camel case lo puedes seguir utilizando,
pero en PHP, normalmente, para métodos y tal,
utilizaríamos snake case.
Ya os digo, ¿eh? Muy subjetivo,
pero aquí cada uno que haga lo que le dé la gana.
Nosotros lo vamos a hacer así.
Aquí lo que vamos a hacer es mover esto
y ya tendríamos nuestra primera función.
Devolvemos el data, ¿vale?
Importante que aquí sí que hay que poner puntos y coma,
que no nos olvide los puntos y coma,
que PHP son obligatorios
y no hay forma de quitártelos de encima.
Entonces, aquí esto funcionar, funcionaría,
pero una cosa interesante ya que podríamos hacer,
aparte de llamar, obviamente, a esto no podemos llamar data,
get data, y aquí le pasamos la API URL, ¿ok?
La API URL.
Lo bueno de esta función es que una función ya tan sencilla,
ya la podríamos reutilizar porque le podríamos pasar la URL,
que aquí esto tendríamos que cambiarlo
para que utilice la correcta,
podríamos utilizar la URL que le pasamos como parámetro.
Entonces, ya aquí podríamos tirar de la API URL,
pero podríamos cambiar y llamar a otra API
y ya lo tendríamos.
Pero, ¿qué pasa con esto?
Pues esto tiene, no un problema,
pero sí una cosa un poco polémica.
Y es que, fíjate, ¿ves?
Pongo get data, le paso un 1
y esto se lo come con patatas igual
y no le importa nada, le da igual.
Si no le pasas nada, sí que se queja, ¿vale?
O sea, PHP, dentro de lo que cabe,
tan tonto no es, ¿vale?
Tan tonto no es.
Y es que, fíjate, que aquí sí que se queja
porque dice, oye, esperaba un argumento
y me has pasado cero.
O sea, que sí, el linter tiene cierta inferencia
sobre los tipos, pero muy, muy, muy básica.
Fíjate que te dice que la URL es tipo mixto
y lo que devuelve es tipo mixto.
O sea, que no tiene ni puñetera idea
de lo que le llega ni de lo que devuelve.
Pero al menos sí que sabe que necesita un argumento
y ya se te va a quejar.
Lo malo, que tú aquí le puedes pasar
lo que es un número, por ejemplo,
y ya se queda tan tranquilo.
¿O qué?
Ya dice, ah, bueno, pues si me pasas un número,
pues perfecto, para mí, me lo como.
Entonces, ¿cuál es el problema de esto?
Pues que funcionar va a funcionar.
Fíjate que va a hacerlo todo,
pero no va a tener resultado esperado
porque obviamente no lo hemos pasado en API.
Para solucionar esto, podríamos hacer un montón de cosas.
Pero una cosa que sí que podemos hacer
es añadir los tipos opcionales, ¿no?
Y entonces ya asegurarnos
que aquí le decimos que esto tiene que ser un string.
Pero, ¿qué está pasando?
Que pese a que le he dicho que tiene que ser un string,
fíjate que le estoy pasando un número
y parece que no funciona.
O sea, parece que se lo está comiendo exactamente igual.
Parece que me está diciendo, vale, vale,
me has pasado un número,
pero no me está diciendo nada.
No me está avisando que hay un error, ¿verdad?
Esto es porque cuando tú le pones estos tipos
y fíjate que te dice que el getData
ahora sí que detecta que es un string.
Fíjate la diferencia.
Si le quito el string, ¿vale?
Me dice que getData es mixto.
Y si le quito esto, si le añado el tipo, ¿vale?
Ahora sí que sabe que getData debería ser un string.
Entonces, ¿por qué esto no se queja?
Y aquí viene lo polémico.
El tema es que lo que está haciendo PHP
es tomarse eso de los tipos
como si fuese una...
como una sugerencia, ¿vale?
Como una sugerencia.
Y lo que hace es decir, vale,
como tú me has pasado un número,
lo que voy a hacer es cambiarle el tipo del número
a un string, ¿vale?
Ahí es donde vamos a ver
y vamos a tener el problema, digamos, entre comillas.
Lo que está pasando aquí es que PHP
detecta que le estás pasando un entero
y como tú le has dicho que esperabas un string,
va a hacer una conversión.
Va a convertirlo.
Entonces, ¿esto significa que los tipos son inútiles?
No.
Porque, a ver, dos cosas.
Uno, podemos también indicarle
el tipo que tiene que devolver.
Le podemos decir aquí,
esto va a devolver un array, ¿vale?
Un array.
Entonces, ahora ya getData
ya sabe que tiene un string y un array.
Todavía aquí en array,
fíjate que sí que sabe que es un array,
lo cual está bien,
nos está ayudando,
le estamos dando más información,
pero el número todavía no hay ningún tipo de...
nos dice que es el dato incorrecto ni nada.
Lo que le podemos indicar,
arriba del archivo,
podemos declarar que queremos utilizar
los tipos estrictos.
Y esto, de golpe,
habilita un montón de chequeos
mucho más importantes para los tipos.
Fíjate que ahora sí que me dice
que esperaba el tipo string
y ha encontrado un entero.
Ahora sí que se está quejando, ¿eh?
Ahora sí que detecta
que lo que necesita es una cadena de texto
y esto lo que ya va a hacer
es deshabilitar
esa transformación automática
que estaba haciendo antes.
Esto es muy importante.
Es muy importante
porque hay mucha gente
que se cree que empiezas a poner tipos
y que ya PHP,
ya, sí, sí, ya me lo está controlando,
yo estoy poniendo tipos y tal
y a lo mejor los tipos que estás poniendo
se los está saltando
o los está convirtiendo
y se está salvando
por beta saber qué.
Pero si quieres que realmente
mire los tipos
y no haga conversiones automáticas,
tienes que añadir esto.
Y ahora la pregunta del millón
que mucha gente se hará.
Oye, ¿y esto no lo puedes activar
en todo el proyecto?
No.
No lo puedes activar.
Lo tienes que activar
a nivel de archivo.
A no ser que ahora
se haga una nueva versión de PHP
o en la última que ha salido
lo activen,
pero hasta donde yo sé
no se puede.
No se puede
y tiene,
hasta cierto punto,
tiene sentido
porque al final
si tú pudieras activarlo
de forma global
tendrías que asegurarte
que todos los módulos,
que absolutamente
todo el código
tuviese los tipos estrictos
y eso a día de hoy
no se puede asegurar.
Es que seguramente
incluso internamente
en PHP
no lo pueden asegurar
porque no creo
que internamente
ni siquiera PHP
esté totalmente tipado.
Entonces,
por eso
tiene que ser más
a nivel de archivo.
A nivel de archivo
tenéis que declarar
los tipos estrictos
y esos van a ser
los tipos,
los de ese archivo
que van a funcionar así.
Es un poco raro,
sí,
por eso decía que
PHP tiene tipado
débil,
dinámico
y gradual
porque los tipos
son graduales
y ya veis que
poco a poco
los vamos añadiendo
poco a poco,
¿vale?
Así que ahí lo tenéis,
ahí lo tenéis por aquí,
que lo sepáis
que lo que necesitamos
es
strict types
porque si no,
no van a funcionar
y fijaos que aquí
que aquí
pues no funciona
porque fijaos
que dice
type error
el argumento 1
tiene que ser
de tipo string
y le ha dado
un entero,
¿vale?
No solo el error
lo vais a ver
en el editor,
una vez que ponéis
los strict types
también en vuestra
aplicación
os va a dar
un error fatal
si los tipos
no son correctos,
hombre,
si no,
no serían strictos,
sería otra cosa,
¿vale?
Sería otra cosa,
si no,
no tendría ningún tipo,
no tendría ningún tipo
de sentido,
así que tienen que ser,
son strictos
y esto va a hacer
que vuestra aplicación
pueda petar
si no pasáis
los tipos correctos,
que lo sepáis,
¿vale?
Entonces,
vamos a continuar por aquí,
ya le vamos a pasar
el correcto
y luego veremos
un poquito más
de tipos
con las clases
porque es muy interesante
todo lo que puede pasar.
Recordad solo eso,
que a día de hoy
no se puede hacer
esta configuración global
y la tenéis que poner aquí
a nivel de archivo
y arriba del todo,
no sé si lo podéis poner
más abajo
pero yo siempre lo pongo
arriba del todo
y ya está.
Bueno,
vamos a hablar
de algo muy polémico,
muy,
muy,
muy polémico
de PHP
que son las variables
y el ámbito
de las variables,
¿vale?
Las variables,
vamos con las variables ahora,
las variables definidas
dentro de una función
no pueden ser accedidas
desde fuera de la función.
Esto tiene todo el sentido
del mundo.
Por ejemplo,
imagina que yo voy a crear
aquí una variable
que le llamo title
y la próxima película
de Marvel,
¿vale?
Y la próxima,
bueno,
title,
voy a poner hola,
solo,
voy a poner hola.
Y aquí quiero acceder
a esta variable.
Esto,
obviamente,
no tiene,
normalmente,
por lenguajes de programación
y cómo funciona
el ámbito de ejecución
y el ámbito
de las variables,
pues,
no funciona.
Si vamos aquí,
no peta,
pero sí que me da
una advertencia
que me dice
variable no definida
title,
¿vale?
¿Por qué pasa esto?
Esto pasa en mucho
lenguaje de programación,
tenemos aquí una función
y dentro de estas llaves
estamos declarando
la variable title
que la tenemos aquí.
Fuera de esta función
no podemos acceder
a esta variable.
¿Por qué?
Porque es que si no sería
un berenjenal.
Imagínate
que tú puedas acceder
a fuera de funciones
a variables que están dentro.
Sería una locura.
Bueno,
esto es normal,
pasa en lenguaje de programación
como JavaScript.
Esto es lo que se le llama
el ámbito
o el scope
en el que funciona
la variable.
Pero,
esto es un caso muy típico,
pero hay un caso en PHP
que no es tan típico
y es muy raro.
Y lo vamos a ver.
El tema es,
esto ya lo podéis imaginar,
pero otra cosa
que no funciona
es esta de aquí.
Si ponemos aquí hola
y aquí vamos a poner,
vamos a utilizar
el echo title,
fíjate que ya se me queja.
Variable no definida
title.
Esto que ves aquí
tampoco funciona.
¿Esto qué quiere decir?
Que el ámbito
de esta variable
no va a llegar
adentro de la función.
Esto si vienes de JavaScript,
por ejemplo,
dirías,
wow,
¿cómo?
¿Qué?
Exacto.
En JavaScript
esta variable
sí que sería posible
acceder a ella
desde dentro de la función,
pero en PHP
no pueden ser accedidas
dentro de la función.
¿Vale?
¿Cómo tendríamos
que hacer esto?
Tendríamos diferentes
formas de hacer esto.
Una cosa que podríamos hacer
es indicar
que la variable
que queremos utilizar
es global.
Tendríamos que decirle,
oye,
utiliza la variable
global title
y esto
le indicamos
que queremos acceder
a esta variable
que es global
dentro del ámbito.
Está global,
¿vale?
Y ahora sí
podría utilizarse
dentro de la función.
Pero se lo tienes
que indicar,
no es implícito,
¿vale?
Se lo tienes que indicar tú.
Esta es una cosa
que podríamos hacer
y obviamente
la otra opción
sería pasárselo
por parámetro,
¿vale?
Le pasamos por parámetro
esto y ya está.
Pero estas serían
como las dos opciones
más allá de también
otro tipo de globales
y de variables de entorno
que podríamos hacer.
Pero a nivel de variable
estas serían las cosas
que podrías hacer
para acceder.
Esto es muy importante
que lo tengas en cuenta
porque ya te digo
que te puede fallar
constantemente
si no te das cuenta
de,
ostras,
cómo funciona esto,
cómo lo tiene que hacer
y todo esto.
Hay otros lenguajes
que son similares
a esto.
Si vienes de JavaScript
te sorprenderá.
Si vienes de Python
pues a lo mejor
no te sorprende tanto.
Depende del lenguaje
que vengas
pues te sorprenderá
más o menos,
¿vale?
Entonces,
vamos a ver,
vamos a hacer otra función
ahora que ya tenemos esto
y esto por aquí,
¿vale?
Vale.
He quitado ya las variables
que te quería enseñar
el tema de las variables.
Muy bien,
muy bien.
¿Qué teníamos por aquí?
El menos de una semana.
No llegamos a hacer,
no llegamos a hacer,
es que estoy viendo aquí,
se estrena lo de
Days Until.
Days Until.
Ah,
vale.
¿No llegamos a hacer el match?
Yo pensaba que habíamos hecho
el match pattern
la semana pasada.
A ver,
¿no llegamos a hacer el match pattern?
Me do life,
curso de PHP.
Yo pensaba
que habíamos llegado
a hacer el match pattern
o...
Yo estoy bastante seguro
que sí que lo hicimos.
¿Veis?
Ahí está.
Ah,
porque lo hicimos aquí en demo.
Lo hicimos en otro archivo.
Vale,
vale,
vale.
Bueno,
entonces,
lo que podemos hacer,
vale,
es que lo hicimos en un archivo aparte
y pensaba que lo habíamos llegado
a hacer aquí.
Mira,
aquí vamos a crear otra función
que le vamos a llamar
getUntilMessage
donde le vamos a pasar un entero
que van a ser los días que faltan
para la película
y va a devolver un string.
Y mira,
si volvemos a hacer el match pattern este
que me gusta un montón.
Aquí lo que vimos del match pattern
es que puedes utilizar el match
y pasándole como parámetro el true
lo que puedes hacer aquí
es crear una condición
que devuelva,
que si pasa esta condición
devuelva esto.
Esto se podría hacer
con un if,
else if,
else if,
todo el rato
o un if return
pero con el match pattern
la verdad es que queda
bastante bonito.
Entonces podríamos hacer algo
parecido a esto
pero aquí dentro,
¿vale?
Esto lo devolveríamos directamente
porque lo bueno del match pattern
es que como es una expresión
esto genera un valor
que te lo puedes devolver
y lo puedes utilizar.
Y aquí en lugar de utilizar
los años,
que no tiene mucho sentido,
utilizaríamos los días,
¿no?
Y aquí podemos decir
que si faltan cero días
para la película
pues aquí le ponemos
pues hoy se estrena,
¿vale?
Y le ponemos aquí
una fiesta,
vamos a poner otra
que sea que hoy es
mañana es el estreno,
mañana se estrena,
Rocket,
y vamos a poner
que si es menos,
menos de siete
pues sería esta semana.
La verdad es que una cosa
que está muy chulo de esto
es que queda,
puedes hacer que queden
las flechitas todas iguales
y se lee súper bien.
Esta semana se estrena,
¿vale?
Vamos a poner ya este mes
y ya está, ¿vale?
Este mes,
este mes se estrena
y al final
podríamos ponerle
el default, ¿vale?
Y aquí vamos a poner,
por ejemplo,
vamos a ponerlos todos igual,
po, po, po.
Y este sería
las condiciones, ¿no?
Si solo faltan cero días
le devuelves esto,
si falta uno,
esto.
Solo entra en una condición
y luego tendríamos
el caso por defecto
que si no entra ninguna
pues vamos a devolverle algo
que va a ser esta de aquí
y vamos a decir
tantos días
hasta el estreno,
¿vale?
Y le ponemos aquí
el calendario,
vamos a poner aquí
también el calendario,
vamos a poner aquí
surprise,
surprise,
este,
vale,
get until message,
vale,
pues este mensaje,
esta función
la vamos a llamar
justamente aquí,
until message,
la llamamos aquí
y le vamos a pasar
de data
el days until,
¿vale?
Que esto era una cosa
que devolvía nuestra función,
lo tenemos por aquí,
bueno,
nuestra API,
perdón,
fijaos que tenemos aquí
cuántos días,
days until,
cuántos días faltan
hasta que se estrena
la próxima película,
la próxima película,
98 días,
98 días,
solo quedan para que se estrene
Deadpool,
me cago en la leche,
¿en serio?
¿solo tres meses?
hostia,
qué bien,
¿no?
o sea,
estoy contento,
estoy contento,
bueno,
entonces,
vamos a poner este mensaje,
el until message,
lo vamos a renderizar
donde nos interesa,
por ejemplo,
aquí,
¿vale?
se estrena en,
en lugar de poner aquí,
ta, ta, ta,
se estrena en,
vamos a poner aquí el until message,
vamos a poner esto,
así,
directamente,
y si vamos a nuestra página,
¿vale?
pues aquí veremos que
Deadpool,
98 días hasta el estreno,
¿vale?
pues vamos a poner
aquí un guión
para que se,
aquí,
98 días hasta el estreno,
si quedas en menos días,
si por ejemplo,
aquí,
en el days este,
le pasáramos un 1,
pues debería ponernos,
mañana se estrena,
¿vale?
pues entonces ya lo estamos haciendo
bastante más dinámico,
entonces ya tenemos
dos funciones diferentes,
que ya nos están ayudando un poco,
si ponemos aquí cosas raras,
como un array,
fijaos que,
ya se queja también,
porque no hemos dejado
del declare strict types,
si le ponemos cosas raras,
aquí detecta que esto devuelve
una cadena de texto,
no va a entender
que esto sea un array,
se va a quejar,
o sea que fijaos que sí que,
ya funciona correctamente
el tema de los tipos,
¿vale?
muy bien,
entonces,
hasta aquí al menos
hemos separado algunas cosas
en funciones,
pero el problema que tenemos
con esto,
es que esto se lee un poco raro,
¿no?
tenemos la mezcla del HTML,
tenemos aquí las funciones,
y vamos a ver una cosa
muy importante de PHP,
que es importar archivos,
así que ahora lo vamos a ver,
pero antes le damos cañita,
hablaste de que esto
debe estar configurado
para que funcione,
que por default es PHP,
no,
Junker,
eso no es así,
para que funcione,
tú lo que dices
es una cosa diferente,
me está diciendo Junker
que para que esto funcione,
esto,
para que esto funcione,
se tiene que tener configurado,
esto no es así,
¿vale?
Esto no se tiene que configurar,
este sí que viene,
viene activo por defecto,
el que se tiene que configurar,
es que,
este,
hay una opción
que puedes hacer
que en lugar de poner,
que el PHP sea opcional,
y hacerlo así,
¿vale?
el problema de este,
es que este no viene activo
por defecto,
¿vale?
Este sería el corto,
pero fijaos la diferencia
que este sería como para,
en lugar de tener que poner el PHP,
lo podáis quitar,
y este,
es el que hace esto,
¿vale?
que este sí que lo tenéis activado
por defecto,
son dos diferentes,
así que tened cuidadito ahí
con confundirlos,
que al final,
creo que en Windows
sí se debe configurar,
yo no lo tengo que configurar
en la vida,
pero bueno,
no sé,
igual quién sabe,
quién sabe si al final
se tiene que configurar,
yo,
por ejemplo,
esto de PHP,
lo instalamos tal cual
y ya venía configurado,
yo creo que no,
pero bueno,
vale,
pues vamos a ver el tema
de importar archivos,
que eso es un poco raro,
no entendí eso,
que no,
si no hay nada que entender,
básicamente que hay una opción
que en lugar de escribir esto,
escribas esto,
esto,
así,
ya está,
eso es lo único que hay que entender
y que es opcional
y que hay que activarlo,
¿vale?
y,
pero yo recomiendo,
es que no lo recomiendo
porque muchas veces
no se utiliza,
no se utiliza,
muy bien,
pues dicho esto,
vamos con las,
los import,
porque ya veis que aquí
tenemos unas funciones,
¿vale?
y las funciones,
vale,
están muy bien,
pero están ahí en medio,
vamos a ver
cómo importar archivos
y esto te va a volar
la cabeza,
vamos a crear aquí
una carpeta functions.php,
¿vale?
en functions.php
vamos a crear,
vamos a mover
lo que tenemos por aquí,
todo esto,
lo vamos a mover aquí,
¿vale?
y ya aquí,
pues ya no necesitaríamos
nada de esto,
ni siquiera esto,
¿vale?
ya teníamos esto aquí
y esto aquí,
vale,
perfecto,
ya hemos movido
nuestras funciones
y obviamente,
pues a esto
no le va a gustar,
¿no?
porque nos dice
que está intentando
llamar a una función
que está undefined,
que es get data
y por lo tanto
necesitamos hacer algo
para poder importar
las funciones
que tenemos
en el functions.php
en nuestro index.php
¿cómo lo hacemos?
hay un,
bueno,
un montón,
no,
pero hay unas cuantas
formas de lograr esto.
La más sencilla
o la más básica
de todas
sería la del require,
pero luego,
ahora te explicaré
todas las diferencias
de cada una de ellas
y los problemas
que tiene cada una.
vamos con la primera,
¿vale?
Podemos decir
que queremos requerir
el archivo
functions.php
esto sería
lo primero,
si guardamos esto
lo que vamos a ver
es que ahora
sí que funciona
todo correctamente.
¿Esto qué es lo que hace?
Esto lo que hace,
como podéis ver,
no hace falta
que exportéis
en ningún caso
las funciones,
no hay ningún
nombre de export
ni import,
no se está haciendo
nada de esto
y podríamos decir
de alguna forma
que lo que está pasando
aquí es que esto,
este código
lo está pegando aquí.
Lo puedes entender así
y ahora verás por qué,
¿vale?
Lo que está haciendo
es hacer un require,
está trayendo
todo el contenido
y lo está poniendo
aquí,
¿vale?
Entonces,
¿qué pasa con esto?
¿Y por qué te digo
que lo tienes que entender así?
Porque puedes hacer esto,
puedes hacer dos veces
el require
y si haces dos veces
el require,
¿vale?
Vamos a ver
que tenemos un problema
porque no se puede
redeclarar el método
en la función
getData.
O sea,
lo que está entendiendo
para que te des cuenta
al hacer el require
lo que está haciendo
realmente PHP
es que se está trayendo
esto dos veces.
Está diciendo,
vale,
este require,
esto,
pum,
y este require,
esto,
pum,
tal cual,
¿vale?
Y para que te des todavía
más cuenta
de que realmente
está pasando esto
y esto te puede volar
un poco la cabeza
porque no pasa
en otro lenguaje
de programación
es muy sencillo
porque si,
imaginad que tenemos
un archivo
que le vamos a llamar
eco.php
y voy a poner aquí
que esto lo único que hace
es un eco import,
¿no?
Lo malo es que vamos a tener
que buscarlo
porque es como se renderizan
otras cosas,
pero mira,
require eco.php,
¿vale?
Lo hacemos dos veces,
lo hacemos dos veces
y fíjate,
import,
import.
Si yo esto lo hago
cuatro veces,
pues aparecerá
cuatro veces.
¿Por qué?
Porque cada vez
que hace el require
se está trayendo
el contenido
y lo está evaluando
y por lo tanto
si en cada archivo
tengo un eco import,
pues aquí lo tienes,
import,
import,
import,
import.
Vale,
¿cómo se puede solucionar esto?
Esto,
por suerte,
PHP,
porque esto es un ejemplo
muy sencillo,
que estamos en un solo archivo,
pero tú imagínate
que tienes un proyecto
de 15.000 millones,
15.000 millones de archivos,
imagínate 15.000 millones
de archivos,
¿vale?
Imagínate un proyecto
muy grande
donde tú estás
importando
estas funciones
en diferentes sitios.
Como las funciones encima
se hacen globales,
¿no?
Porque al final
lo puedes estar importando
desde una parte,
otra parte y tal
y puede haber una colisión
de forma muy sencilla,
el problema es que
si tú vas haciendo requires
que no hace falta
ni que sean en el mismo,
en el mismo fichero,
pues puedes tener
colisiones muy fáciles.
¿Qué es lo que tienes que hacer?
Pues lo que puedes hacer aquí
es utilizar required once,
que significa
solo lo puedes requerir
una vez
y lo que va a hacer esto
ahora
es que va a detectar
si en algún momento
ya lo ha requerido
y ahora solo lo va a hacer
una vez.
O sea,
que normalmente
lo que vas a necesitar
es justamente,
¿vale?
Hacer esto,
vas a necesitar
hacer el required once
para asegurarte
que no lo importas
más de una vez,
¿vale?
Esta sería
la primera forma
de hacerlo.
Normalmente
te vas a encontrar
en tus códigos
si trabajas alguna vez
con PHP
un montón de required once
justamente por esto
y si no
te vas a encontrar
el que te voy a explicar ahora
pero muy típico
porque es que si no
te vas a encontrar
que vas a tener
un montón de problemas.
De hecho,
es el problema más típico
es el tener los requires
y entonces empezar
a haber problemas
de colisiones
e historias raras,
¿vale?
Entonces,
¿qué pasa?
Pues que el require,
¿por qué digo
que hay otra opción?
Porque tenemos el require
pero también tenemos
el include,
¿vale?
Tenemos el require
y tenemos el include.
¿Cuál es la diferencia?
Vamos a ver qué pasa
si yo intento hacer
un require
de un archivo
que no existe,
¿vale?
Este archivo
obviamente no existe.
Si vamos aquí,
¿qué me pasa?
Pues lo que pasa por aquí
me da primero
un warning
y luego me da
un fatal error.
Me dice,
oye,
que he fallado
intentando abrir
el archivo requerido
eco
no existe.php
no existe este archivo
y voy a reventar,
¿vale?
Existe otra forma
de que puedas
incluir archivos
en tus proyectos,
¿vale?
Como importarlos
y en lugar de require
sería include.
¿Pero cuál es la diferencia?
¿Cuándo tienes que utilizar
uno u otro?
La diferencia
es que el include
si no encuentra
el archivo
solo da un warning.
Lo que va a ocurrir
con el include
es que te va a dar
un warning
pero va a seguir
ejecutando tu código.
Por lo tanto,
si esto fuese producción
como las advertencias
no se ven
en producción
porque se desactivan
esta página
funcionaría
sin ningún tipo
de problema
porque este include
al no encontrar
el archivo
no ignoraría
el error
daría una advertencia
pero las advertencias
en PHP
cuando están en producción
no aparecen
no se lanzan
no se muestran
y por lo tanto
veríamos nuestra aplicación
normal y corriente.
Entonces,
esta es la diferencia
entre el include
y el require.
Con el include
pasa lo mismo
teníamos include
y el include once
¿vale?
Igual que tenemos
que hacer el require
require once
pues lo mismo
pasa con el include.
¿Cuándo utilizar uno u otro?
Esta es la pregunta
del millón
que nos hacemos
todos los días
¿vale?
Pero básicamente
lo que yo
si me preguntas a mí
si me preguntas a mí
yo casi siempre
utilizaría el require.
Es importante
saber cuándo
y tener visibilidad
y que incluso
te llegue a petar
la aplicación
si hace falta
cuando estás importando
bibliotecas,
funciones,
cosas críticas
que necesita
tu página.
¿Cuándo utilizarías
el include?
A ver,
si es algo
que no es importante
que es secundario
que son archivos
generados dinámicamente
que son opcionales
y cosas así
pues puede tener sentido
pero ya te digo
que la mayoría
de veces
vas a querer utilizar
el require
porque te vas a querer
enterar totalmente
si en algún momento
te está fallando
algo
y luego no tener
la sorpresa
en tu página
en producción
sino que vas a querer
decir
oye
voy a hacer
que esto pete
si falla algo
así que
sí que puede ser
que utilices
el include
en algún momento
pero yo creo
que casi siempre
deberías utilizar
el require
a no ser que sea
algo opcional
secundario
que no sea importante
para tu aplicación
y cositas así
¿vale?
¿Y cuándo puede ser
no útil usar el once?
Muy buena pregunta
pues mira Fran
lo vamos a hacer hoy
¿vale?
Lo vamos a hacer hoy
para que lo veas
pero por ejemplo
imagínate
que tienes un banner
¿vale?
Vamos a poner aquí
banner.php
imagínate
que tenemos aquí
un banner
que este
es un banner
¿ok?
imagínate que es un banner
con una imagen
increíble
y lo que sea
claro
tú vas a querer
que se pueda requerir
más de una vez
porque a lo mejor
lo requieres aquí
tú haces el php
require
banner.php
¿vale?
son opcionales
esto
y queda
como mejor
y a lo mejor
más abajo
quieres volver a importarlo
¿sabes?
lo quieres volver a hacer aquí
entonces
ahí ya no tendría sentido
¿vale?
este es un banner
y este es un banner
esto podría tener sentido
utilizar el require
porque si utilizas
el require once
claro
¿qué es lo que va a pasar?
pues que vas a tener
la sorpresa
que solo se va a ver
una vez
entonces
¿vas a esperar esto?
no
tú esperarías
que se mostrase
dos veces
entonces
piénsalo un poquito así
normalmente el require
puede tener sentido
en temas más
no visuales
pero sí que
lleguen a escribir
en el html
y que quieres que ocurra
más de una vez
pueden ser scripts
pueden ser partes
de la ui
pueden ser templates
pueden ser un montón
de cosas
pero normalmente
si son más puro código
que son bibliotecas
y tal
vas a querer
hacer el require once
para asegurarte
que solo lo haces
una vez
¿vale?
así que esa sería
una de las razones
muy bien
vamos a poner aquí
el include
vamos a ponerlo bien
require once
que creo que sería
lo correcto
vamos a leeros
ojo que Mito está hablando
de php básico
no de framework
claro
a ver
obviamente
aquí
la idea
la idea
es que entendáis
php
y que estamos
haciendo php
básico
no estamos utilizando
la arable
no estamos utilizando
ningún tipo de framework
los frameworks
normalmente
ya tienen módulos
inyección de dependencias
tienen un montón de cosas
que os van a facilitar
la vida con todo esto
pero
aún así
es importante
que entendáis esto
porque es muy normal
que aunque utilicéis
un framework
tengáis que lidiar
con módulos
que no utilizan
el framework
o con bibliotecas
de terceros
o con lo que sea
¿vale?
para que lo tengáis en cuenta
esto sería como lo más
lo más básico
más adelante
incluso hay cosas
un poquito más avanzadas
con los namespaces
para evitar las colisiones
que ya veremos
si lo vemos más adelante
¿vale?
entonces
vamos a hablar
de otra cosa
que es el ámbito
de las variables
que esto también es un tema
bastante
bastante polémico
y es que
fijaos en una cosa
que esto
os va a estallar
también la cabeza
el ámbito de las variables
ya hemos visto antes
que es bastante curioso
pensemos
que vamos a
aquí tenemos el HTML
es un poco tedioso
tenerlo todo
en el mismo fichero
ya hemos separado
las funciones
vamos a separar
más cosas
¿vale?
voy a eliminar
los archivos
que no necesitamos
vamos a crear
una carpeta
que le vamos a llamar
sections
y en sections
pues vamos a separar
nuestra página
por ejemplo
vamos a tener
el head.php
y vamos a sacar
esta parte de aquí
y la vamos a poner aquí
¿vale?
y fijaos
que aquí
aquí veo que
la próxima película
de Marvel
vale
la próxima película
de Marvel
que todavía
no tenemos aquí
la próxima película
de Marvel
vale
no estamos utilizando
ninguna variable
voy a poner aquí
que utilice una variable
por ejemplo
data title
si no me equivoco
esto debería
data
object found array
expected type
object found array
ajá
claro
un array
asociativo
¿vale?
vamos a ponerle
el punto y coma
vale
entonces
ahora
en el título
fijaos
que aparece
en el título
de la página
pone la próxima película
de Marvel
Deadpool
Wolverine
¿vale?
ahora sí
vamos a sacar esto
aquí
lo vamos a poner aquí
y aquí tenemos
este data
y todo esto
vale
cuando esto está aquí
ya vemos que este data
lo vemos aquí
¿verdad?
este data está aquí
y lo utilizamos aquí
pero ¿qué pasa?
¿qué pasa?
si yo ahora
hago esto de aquí
¿qué pasaría con esto?
va a petar
va a petar
porque
fíjate
¿de dónde saca este data?
¿de dónde lo saca?
lo saca de algún sitio
va a petar
porque no lo encuentra
sí que lo encuentra
os va a sorprender
y es que sí que lo encuentra
sí que funciona
no hay ningún problema
¿vale?
no hay ningún problema
¿cómo funciona esto?
¿y por qué?
¿y con qué magia negra
está funcionando
ahora mismo PHP?
lo está encontrando
porque ya os he dicho
ya os he dicho antes
que tenéis que imaginar
que cuando hagáis
un require
o un include
tenéis que entender
que es como si este código
como si este código
lo pegase aquí
entonces
si tenéis que entender
que ese código
es como si lo pegase ahí
¿vale?
si tenéis que entender
que ese código
es como si lo pegase ahí
¿qué quiere decir?
que también tiene acceso
a esa variable
o sea
es así ¿no?
entonces
normalmente
esto es más bien
porque este data
lo tenemos aquí
como si fuese algo global
y entonces puede acceder
a esta variable
teniendo en cuenta
lo que hemos visto antes
de las funciones
y todo esto ¿no?
pero en este caso
no va a haber
ningún tipo de problema
es una magia
un poco negra
que no es recomendable
que hagáis
porque ahora aquí
no vais a saber
de dónde aparece este data
luego lo arreglaremos
de otra forma ¿vale?
pero en este caso
tenéis que ver
que aunque hagáis un require
va a tener acceso
a las variables
del archivo
que lo está importando
¿vale?
así que esto es una cosa
un poquito distinta
a otros lenguajes
de programación también
pero es que tenéis
que cambiar totalmente
el chip
de cómo funcionan
los requires
y los includes
en PHP
esto mismo
lo vamos a poder hacer
pues con otro
vamos a hacerlo también
de hecho
hostia
este API URL
que me lo he cargado
porque
fijaos que aquí también
ya estaba pasando
y no os lo he enseñado
aquí cuando he hecho
el functions
¿ves?
aquí tengo la constante
esta
y esta constante
ya se la está trayendo aquí
la puede acceder
porque aquí en este require
lo tiene aquí
que normalmente
en otros lenguajes
esto no funcionaría
pero en PHP sí
porque al hacer el require
ya se está trayendo
también la constante
por eso aquí también funciona
sin ningún tipo de problema
bueno
vamos a separar
las secciones
¿vale?
vamos a separar
por ejemplo
esto sería
el main
podríamos llamarle
mira
vamos a separar
por ejemplo
los styles
¿vale?
vamos a poner
los styles
tendríamos aquí ya
styles.php
los ponemos ahí
ya ponemos aquí
el require
con los styles
y también vamos a tener
el main
¿vale?
y el main
lo vamos a sacar aquí
y al menos ahora ya
empezaríamos a tener esto
como separado en archivos
¿no?
ya tendríamos esto
aquí en este caso
yo creo que tiene sentido
que utilicemos el require
porque no nos gustaría
limitar
cuántas veces
se renderiza esto
nosotros somos las personas
que básicamente decidimos
cuándo y dónde
se renderiza
cuántas veces
¿vale?
pero con esto ya al menos
tendríamos
nuestro archivo
nuestra página
que funciona
y ya hemos separado
un poquito el html
no es todavía
perfecto
podríamos separar más cosas
de hecho las constantes
las vamos a dejar
también en un archivo
en lugar de tenerla ahí
suelta
esta de functions
esta constante
que la tenemos aquí
la podríamos poner
aquí
la vamos a poner
por aquí
la constante
y lo que vamos a hacer aquí
en nuestro
main
no
en nuestro index.php
es que vamos a traernos
primero las constantes
¿vale?
y luego
las funciones
y así tendríamos aquí
el API URL
y todo esto
vale
por ahora lo dejamos así
¿no?
pero
esto
se puede mejorar
se puede mejorar
porque obviamente
no vamos a querer
vamos a ver que esto
funcione todavía
¿vale?
API URL
already defined
porque en functions
me parece que no lo he quitado
ah, no he guardado el archivo
vale
vamos a eliminar todo esto
lo dejamos así
fijaos que ya
ha cambiado bastante
al menos ya tenemos
separado un poquito mejor
en el index
tenemos esto
bueno
todo funciona bien
nuestra página funciona bien
pero el problema
que tenemos un poquito aquí
es que
lo que vemos aquí
en el section
son como archivos
PHP
directamente
que tenemos
como todo el HTML
y ya está
y lo que tenemos que hacer aquí
es un require
y como podemos ver
además
está trayendo
el data
de un objeto global
o sea
en lugar de
controlar nosotros
la información que le pasamos
la está pillando
de una variable
que no tenemos visibilidad
lo que vamos a hacer
es mejorar todo esto
y vamos a hacer
un sistema de plantillas
nosotros
desde cero
con PHP
en cuatro líneas de código
cuatro líneas de código
¿vale?
así que
lo primero es que vamos a crear
una carpeta
le vamos a llamar templates
y esto va a cambiar un poquito
a como los teníamos antes
me voy a copiar por ahora
exactamente el head
punto PHP
me lo voy a copiar
exactamente igual
¿vale?
aunque ahora veremos
que esto va a cambiar un poco
pero por ahora
lo dejamos así
copiamos
en lugar de sections
lo vamos a poner en templates
y aquí tendríamos
el de head
¿vale?
en functions
vamos a crear
una nueva función
teníamos la función
de get data
get until message
vamos a crear una nueva
que le vamos a llamar
function render template
donde le vamos a pasar
como un string
el template
¿vale?
y le vamos a pasar
un array
con los datos
que queremos
que pueda renderizar
ese template
¿vale?
entonces
una vez que tenemos aquí
el data
hay un método
muy interesante
que existe
en PHP
que nos va a permitir
renderizar
extraer
en variables
todos los datos
de un array asociativo
y ese es el método
extract
pero antes de hacerlo
y explicarte esto
vamos a hacer otra cosa
¿vale?
vamos a hacer aquí
que en el render template
vamos a hacer un require
de templates
bueno
perfecto
de templates
barra
y el template
que le pasemos
entonces
¿qué template
es el que vamos a querer renderizar?
si nos vamos por aquí
en lugar de hacer el require
vamos a hacer el render template
y lo que vamos a querer renderizar
va a ser el head
ya no hace falta
que le pasemos
ni siquiera la extensión
porque fijaos que aquí
en las funciones
lo que estamos haciendo es
templates
esta es la parte
que le pasamos
y ya entiende
y ya sabemos
dónde tiene que ir a buscarlo
y la extensión
que le tiene que poner
y así lo dejaremos
mucho más sencillo
entonces ya podemos hacer aquí
el render template
y ya lo tendríamos así
si guardamos aquí
¿vale?
si guardamos aquí
pues parece que todo
sigue funcionando exactamente bien
pero
fijaos que hay un warning
¿vale?
y esto
aquí hay un warning
¿ves?
warning
undefine array
key title
in
no sé qué
no sé cuánto
en la línea
no sé qué
¿qué es lo que está pasando ahora?
que ahora
nuestros templates
no tienen el acceso global
que tenía antes
a la variable data
esta data
que antes la estaba pillando
de aquí
por arte de magia
ahora no pasa
¿y sabes por qué no pasa?
porque el render template
está renderizándose
dentro de una función
y está haciendo el require
dentro de una función
y como te he explicado antes
en las variables
que no podrías acceder
por ejemplo
si aquí tuviésemos data
¿vale?
este data
no puedes acceder aquí dentro
no puedes
¿vale?
fijaos que esto
se quejará
ay perdón el punto y coma
se quejará ¿no?
porque este
este data sí
porque claro
es el mismo nombre
que le he puesto al parámetro
Miguel
vale
pues aquí
fijaos ¿no?
que dice la variable
no está definida
entonces fijaos
que ahora no puede acceder
a las variables
que están fuera de la función
esto es un beneficio
de lo que estamos haciendo
al crear una función
render template
que ahora
ya no va a acceder
mágicamente
a las variables
que están fuera
porque como lo estamos haciendo
dentro de una función
digamos que estamos
haciendo que su ámbito
de esa plantilla
esté ahí dentro
¿vale?
lo que sí que podemos hacer
sería pasarle nosotros
los datos que queremos
que pueda renderizar
¿no?
aquí en lugar de hacer
el render template
y solo pasarle este
le podríamos pasar aquí
el data
se lo podemos pasar así
y aquí
le recibiría el data
¿vale?
pero claro
¿cómo hacemos?
¿cómo le pasamos
el data
al template?
claro
aquí tenemos este
este data aquí
que se lo estamos pasando
aquí justamente
con toda la información
que queremos renderizar
la tenemos aquí
pero no
¿cómo se la pasamos
a este require?
¿cómo hacemos
que dentro de esta función
pueda tener acceso
a todas esas variables?
bueno
pues lo podemos hacer
justo con lo que os decía antes
un método
que lo que te permite
es extraer
todas las variables
todos los valores
de una red asociativo
en variables
y dejarlos dentro
del ámbito
donde estés
y en este caso aquí
lo que vamos a hacer
es decirle
quiero que me extraigas
data
¿vale?
y esto lo que va a hacer
es extraer las variables
de la red asociativo
y los va a dejar ahí dentro
ahora ya
si por ejemplo
data
era igual a title
hola
lo que va a hacer
una vez que hacemos
el extract
lo que va a ocurrir
es que vamos a tener
una variable llamada title
que se va a llamar hola
¿vale?
lo vamos a tener así
una vez que hagamos
el extract
del data
esto es lo que va a ocurrir
nosotros no hace falta aquí
que veamos nada
no hace falta que veamos
absolutamente nada
cuáles son las variables
y tal
pero sí que
en los templates
aquí
ahora
vamos a poder acceder
directamente al title
porque hemos extraído
ese contenido
y ya sabemos
que lo tenemos ahí
¿vale?
pero así ya evitamos
solo lo que le pasemos
va a tener acceso
y no vamos a tener
que estar pendientes
de si está en una variable global
o lo que sea
solo lo que pasemos
al render template
va a tener acceso
vamos a ver
si ahora sí que funciona
y ahora podéis ver
que el title
sí que está pillando
el título correcto
¿vale?
y todo gracias
a lo que hemos hecho
aquí
render template
le pasamos el data
si quisiéramos aquí
podríamos pasarle
exactamente
solo lo que queremos
podríamos pasarle
el title
o lo que sea
aquí en functions
le estamos pasando
el array
con todos los valores
los extraemos
y ya tenemos acceso
directamente aquí
a cada uno
de esos valores
lo podríamos ver
con un var dump
¿vale?
para que veamos
todos los valores
que tenemos aquí
y ahora vais a ver
¿no?
que tenemos aquí un array
pues todos estos valores
los tendríamos ahí
podríamos evitar
y solo pasarle
el que necesitamos
¿vale?
pero ahora para simplificarlo
pues lo vamos a dejar así
ok
¿tenéis preguntas amigos?
¿alguna pregunta?
el extract como
el spread operator
de javascript
el spread operator
lo que tienes
es que puedes extraer
solo y justamente
lo que quieres
¿no?
y en este caso
no creo
o sea
en este caso
los extrae todos
el spread operator
lo que tienes que entender
es que tendrías que
decirle exactamente
el que quieres
¿no?
¿qué pasa con los arrays
dentro de data?
todo se queda exactamente igual
si es un array
pues se queda como un array
y ya está
no habría ningún tipo
de problema
o sea
lo vas a tener
en un array
si hay un array
dentro de
por ejemplo
film
pues ahí lo tendrás
y no habrá ningún problema
lo mismo podríamos hacer
aquí
bueno
el styles
no hay ningún
no hay ningún estilo
y tal
que tenga valores
y eso
podemos dejarlo así
como styles
que es como el más sencillo
y lo que sí que podemos hacer
en el sections
pues hacemos también
el render template
lo vamos a pasar
a render template
y aquí
vamos a poner el main
tu tu tu
main main main
quitamos esto
esto por aquí
¿vale?
y aquí le pasamos también
el data
vamos a copiar
en templates
vamos a copiar
este main
lo pegamos aquí
y el style
lo pegamos aquí
así este sections
ya lo podemos eliminar
ahora vamos a trabajar
siempre con templates
lo que pasa es que
en el main
ahora en lugar de tener
el data posterior
lo que tenemos que hacer
con todos
es directamente
acceder
al nombre
que tiene
eso
en el array asociativo
así que
vamos a cambiar
vamos a quitar
todos estos
vale
y aquí
mira aquí hay un ejemplo
el following production
este es un ejemplo
de lo que decía
¿no?
¿qué pasa si un array
dentro del array?
pues mira
que sigue siendo un array
y que puedes acceder
a ese array
a la posición que tú quieras
y con esto
si hemos hecho todo bien
¿vale?
vale he puesto ahí
he dejado el bar dump
en algún sitio
aquí creo que le he dejado
el bar dump
pero
si todo ha ido bien
vale
el until message
me queda
el until message
¿veis?
este todavía no se lo estoy pasando
se lo debería pasar también
¿vale?
el until message
para pasarle el until message
¿qué es lo que pasa?
que en el main
aquí
que es lo que estamos renderizando
¿veis que tenemos aquí
until message?
claro
pero el until message
no está dentro de data
porque data
es lo que estamos accediendo
de la API
y el until message
lo tenemos aquí
lo tenemos en una variable
separada
pues no hay ningún problema
lo que podemos hacer fácilmente
en PHP
es también mergear
o fusionar arrays
así que lo que podemos hacer
en el main
es decirle
que lo que queremos pasar
es
vale
quiero que me pases
todo lo que sería
el data
pero también
quiero
que me mergees
un array
que tiene un until message
que su valor
su valor
es
until message
y vamos a aprovechar
a cambiarle
el nombre a variable
para que sea
snackcase
¿vale?
entonces estamos haciendo
un array merge
donde tenemos el data
y en el data
también le estamos pasando
también al until message
en este caso
lo estamos haciendo así
aunque también
podríamos añadírselo
a data
directamente al until message
pero bueno
a lo mejor no queremos
y lo que queremos
es cada uno
pasarle unos datos
diferentes
podemos fusionar
dos arrays diferentes
o sea
no siempre vamos a querer
que data tenga
todos los datos
y ya está
¿no?
lo mismo pasa con el head
que en el head
aquí hemos puesto lo de data
pero lo que os decía
podéis pasarle
lo que exactamente queráis
podríamos hacer algo así
por ejemplo
¿no?
y de data
solo extraer
el title
¿ok?
y entonces le pasamos
solo y exclusivamente
lo que necesita
en lugar de que data
sea un objeto mágico
que lo tiene todo
y aquí podríamos hacer
un poquito lo mismo
pasarle el array
con justamente
lo que quiere
pero bueno
os quería enseñar también
el array merge
para que veáis
como podéis mergear
y fusionar arrays
¿vale?
vale
aquí
tengo que acceder
a until message
que lo hemos dejado
así
así
hay que hacerlo
con snakecase
y ahora
ya lo tendríamos hecho
¿vale?
así que ya veríais
un poco
el tema
de cómo hacer
los templates
y todo esto
ahora vamos a hablar
de las clases
de cómo haríamos clases
para hacer objetos
instancias
un poco
de programación orientada
a objetos
y todo esto
en el render de main
falta el punto y coma
al final de paréntesis
para que funcione
en el render de main
falta el punto y coma
bueno a ver
estos puntos y comas
son opcionales
estos sí que son opcionales
o sea
aquí no hay ningún problema
porque cuando tú haces esto
normalmente de hecho
ni siquiera los pongo
entonces aquí no debería
ningún problema
y aquí no sé
ah aquí
aquí tampoco hay ningún problema
o sea
claro
el problema sería
si pongo algo aquí
entonces sí que hay un problema
pero si lo cierras
justamente aquí
no es necesario
el punto y coma
así que bueno
lo podemos poner
¿te referías
al render template?
render template
render template
tampoco veo que falte
ningún punto y coma
¿dónde está el punto y coma?
no veo el punto y coma
que le falte
no veo ningún punto y coma
en el index
vale
venga
aquí cada uno me dice
en un sitio
ah
en este
pero exactamente
es lo mismo
es lo mismo
este punto y coma
es opcional
no pasa absolutamente nada
o sea
si los quitas
no pasa nada
no pasa nada
el problema sería
¿cuándo es el punto y coma
necesario?
si yo aquí
vuelvo a escribir
entonces sí que
ahí me va a dar problemas
pero si abres
y cierras en la misma línea
está bien
que pongas el punto y coma
es buena idea
pero no pasa nada
¿vale?
vale
¿consideras que aún vale la pena
aprender PHP?
totalmente
yo
yo
os recomendaría mucho
aprender PHP
y yo creo que lo que se aprendió
del otro día
y lo que se aprende del otro
o sea
lo que aprendemos hoy
os da
no al 80%
pero sí que os puede dar
una base
para que empezáis a aprender PHP
que no tengáis miedo
a tocar código de PHP
y cosas así
que me parece que es súper
súper interesante
así que
sí yo totalmente
totalmente
muy bien
entonces pues vamos con las clases
vamos con las clases
y para hacer clases
vamos a hacer clases
punto PHP
vamos a hacer un ejemplo ahí
facilito
pero luego
lo vamos a ir metiendo ahí
a cositas
en fin
las clases
cuanto más complejas
sean nuestras aplicaciones
pues más difícil
en mantener el código limpio
de hecho ya vemos
que las funciones
a ver
no está mal
pero aquí hay un poco
de problema
¿no?
porque las funciones
que si get data
get until
o sea
aquí hay ya una mezcla
y si fuese creciendo
fuese creciendo
sería mucho peor
entonces
conforme va creciendo
nuestra aplicación
si queremos hacer
un código limpio
ordenado
pues puede ser buena idea
no agrupar
mucha funcionalidad
en variables y funciones
sino hacerlo más
relacionado con objetos
¿no?
¿y qué es un objeto?
bueno
un objeto
vamos a entender
que una clase
es como un plano
o una plantilla
para crear objetos
y un objeto
sería una instancia
de la clase
dentro del contexto
de lo que estamos hablando
ahora aquí en PHP
y de las clases
y todo esto
¿vale?
entonces
la idea es que
la clase
describa algo
que tenga sentido
puede ser
una película
por ejemplo
y una película
va a tener
tanto propiedades
como métodos
¿no?
vamos a poder
tener información
de las películas
pero también
vamos a querer
hacer
vamos a querer
tener métodos
para sacar información
actualizar información
o realizar acciones
sobre esas películas
entonces
hasta ahora
lo que hemos ido viendo
con PHP
es lo que se le llamaría
un poco
programación procedimental
¿vale?
la programación procedimental
y programación imperativa
sería un poquito
en hacer
en base a funciones
y haciendo cosas
y qué es lo que tiene
que hacer continuamente
un paso detrás del otro
de forma secuencial
y todo esto
y ahora
nos vamos a meter
más en un tema
que es la programación
orientada a objetos
¿no?
que se centra en crear objetos
y que van a tener
tantos datos
como métodos
como hemos visto
como propiedades
para que podamos
trabajar sobre ellos
así que
¿cómo vamos a escribir
nuestra primera clase?
antes de meternos
en el ejemplo real
de nuestra aplicación
vamos a hacer
una definición básica
¿vale?
para que lo tengamos
tenemos que utilizar
primero PHP
¿vale?
y luego la palabra
reservada
class
para definir
nuestra clase
ahora
aquí en las clases
aquí mira
fíjate que movie
nos indica todo esto
esto está muy interesante
esto es un poco spoiler
pero lo que estáis viendo
no es necesario
un PHP 8
porque esta es la forma larga
y hay una forma
mucho más corta
de hacer exactamente esto
sin repetir
tres veces
exactamente lo mismo
así que quédate
que te lo voy a explicar
que está bastante chulo
bueno
vamos a crear una clase
que sea superhéroe
por ejemplo
por decir una sencilla
hemos dicho que las clases
pueden tener propiedades
y métodos
para tener las propiedades
y métodos
se pondrían dentro
de las llaves
aquí tendría que ir
las propiedades
y los métodos
las propiedades
digamos que son como
que describen
o la información
los datos
de nuestros objetos
¿no?
y las propiedades
al final
vamos a querer decir
cómo es la visibilidad
que tienen
los clientes
de este objeto
sobre ella
o sea
qué pueden ver
qué pueden actualizar
y cómo se pueden tratar
estos datos
si es público
si son privados
vamos a empezar
diciendo que todos los datos
porque somos muy transparentes
todos nuestros datos
son públicos
entonces tenemos
los superhéroes
que tienen
pues tienen un nombre
que tienen un poder
y que también
tienen un planeta
¿vale?
vamos a poner que
en lugar de power
vamos a llamarle powers
y hacemos un array
¿vale?
tenemos tres propiedades
las tres propiedades
son públicas
los superhéroes
tienen un nombre
tienen poderes
y son de un planeta
¿vale?
ya estamos definiendo
un poquito
como ese plano
con el que vamos a poder
crear ahora
todos los superhéroes
que queramos
¿no?
pero antes de crear
nuestro superhéroe
vamos a querer
tener algún tipo
de información
del superhéroe
que pueda hacer algo
¿no?
por ejemplo
un superhéroe
podríamos tener
una función pública
y decirle
que yo que sé
que pueda hacer
o pueda
atacar
atac
que pueda atacar
entonces
cuando ataca
lo que hace
es
devolver una cadena
de texto
que dice
el superhéroe
con el nombre tal
ataca con sus poderes
también vamos a obtener
una función
para que sea
tener la descripción
¿no?
y en la descripción
vamos a tener
una descripción
es un superhéroe
que viene de este planeta
y tiene los siguientes poderes
bueno
esto seguramente
petará después
porque lo vamos a hacer
con un array
pero al menos
para que tengamos
algo ya
entonces ya
estamos viendo
propiedades
y métodos
y esto
sobre el superhéroe
pero esto
como os hemos dicho antes
como hemos dicho antes
es
como el plano
¿no?
es como
las instrucciones
para crear
realmente el superhéroe
no es un superhéroe
en sí
sino que
esto es como que
lo estamos describiendo
para poder crear
el superhéroe
lo que tenemos que crear
es una instancia
tenemos que crear
un objeto
a partir de esta clase
¿y cómo se hace?
pues tenemos que crear
nuestra variable
y dentro de la variable
le vamos a asignar
diciéndole
new
super hero
¿vale?
estamos diciendo
quiero crear
un nuevo superhéroe
y el nuevo superhéroe
quiero asignarlo
a giro
ahora mismo
como podemos ver
no le estamos
¿cómo le estamos
indicando en este plano
cuál es el nombre
del superhéroe?
aquí lo único
que estamos diciéndole
es que tiene un nombre
pero no le estamos
dando un nombre
por lo tanto
si yo ahora
por lo que sea
intento darle
decir
voy a acceder
al nombre del superhéroe
para acceder
a una de las propiedades
tendríamos que utilizar
guión
y mayor que
que es como que te dibuja
una flechita
y ahora fíjate
que incluso me hace
el autocomplete
y me ha detectado
tanto los dos métodos
como las tres propiedades
que tenemos
si yo digo
que quiero hacer
un echo
del hero name
y abrimos la terminal
y ejecutamos aquí
el php
clases.php
¿vale?
veis que está vacío
en cambio
si pongo aquí
echo hola
pues vais a ver
que sí que me va a aparecer
el hola
entonces
ahora mismo
tiene un nombre vacío
obviamente
podríamos darle
el nombre que queramos
incluso una vez creado
el objeto
tal y como está
podemos modificar
estas propiedades
una vez que tenemos
el objeto
y lo hacemos exactamente igual
o sea
igual que hemos accedido
antes a la propiedad
también podemos acceder
para asignarle algo
pues decirle
vale pues del héroe
que he creado
quiero que el nombre
ahora sea por ejemplo
Batman
y luego en el giro
vale
vamos a poner también
que los poderes
son inteligencia
fuerza
y tecnología
que es bastante verdad
y el planeta
es Gotham
esto es un poco polémico
porque Gotham
es una ciudad
pero bueno
no pasa nada
y ahora lo bueno
es que sí que podríamos
llamar al giro
description
y nos debería dar
la descripción
esta cadena de texto
donde debería dar
toda la información
si lo ejecutamos
vamos a darle
ves Batman
Batman es un superhéroe
que viene de Gotham
y tiene los siguientes poderes
inteligencia
fuerza y tecnología
pero esto funciona
por lo que hemos hecho
aquí en medio
que básicamente
una vez hemos creado
el objeto
lo que hemos hecho
es como
asignarle los valores
para que te hagas una idea
de lo que ha pasado aquí
básicamente
es como si hubiéramos creado
en una fábrica de coches
hemos creado el coche
y una vez que lo hemos creado
le hemos cambiado
la tapicería
le hemos cambiado
la marca al coche
y también lo hemos pintado
¿no?
entonces
hemos fabricado el coche
y una vez
que nos han dado el coche
le hemos cambiado
los diferentes atributos
del coche
pues esto es un poquito
lo mismo del superhéroe
que lo que hemos hecho
es
hemos creado el superhéroe
y después
es que le hemos cambiado
las propiedades
vale
una vez que hemos hecho esto
claro
esto no es lo ideal
lo ideal
lo mejor
es que
cuando tú te compras un coche
lo que quieres
o lo que te gustaría
es que una vez que sale
de fábrica
ya te venga
con el nombre
con la tapicería
y la pintura que quieres
pues esto es exactamente
lo mismo
a mí lo que me gustaría
es que mi superhéroe
cuando lo creo
me venga ya preparadito
y no tenga que hacer algo
como esto
que ya veréis
que esto no es lo ideal
ni suele ser lo recomendado
entonces
¿cómo podemos hacer esto?
utilizando lo que se le llama
un constructor
¿por qué?
porque construye nuestro objeto
lo que me gustaría
es que le pudiéramos pasar
aquí directamente
ya la información
o sea
le podamos pasar
que es Batman
que además de que Batman
aquí
¿qué es lo que le podemos decir?
el powers
¿no?
que es dinero
inteligencia
y tecnología
y luego pasarle
el planeta
entre comillas
porque está en la ciudad
pero bueno
lo que queremos
es poder informarle
nada más
crear el objeto
de las diferentes propiedades
que va a tener dentro
¿no?
así que haríamos esto
pero para poder
hacer que esto funcione
ahora mismo
tenemos que crear
lo que se le llama
un construct
¿vale?
un constructor
y aquí va a recibir
tanto el nombre
como los poderes
como el planeta
y aquí
vamos a tener que asignarle
cada uno
de los parámetros
que le estamos pasando
a cada una
de las propiedades
que tiene
y así
cuando hagamos el new
ya directamente
nos va a crear
exactamente
el héroe
con
las propiedades
iniciadas
tal y como queremos
entonces
esto es para lo que sirve
un constructor
además
los constructores
pueden hacer otras cosas
por ejemplo
podríamos hacer
validaciones
para asegurarnos
que se está creando
correctamente
el objeto
que se le está pasando
un nombre
que sí que existe
un planeta
que sí que existe
que es válido
cosas así
¿no?
podríamos hacer
otro tipo de cosas
inicializar cosas
que no se le pasan
por ejemplo
aparte de esto
pues podríamos poner
level
inicializarlo en cero
aunque no aparece
podríamos poner aquí
el level
¿vale?
podríamos iniciarlo en cero
podría inicializarse
de otras formas
pero esta podría ser una
en el constructor
podemos hacer
un trabajo extra
que a lo mejor
es interno
y que no hace falta
que la gente de dentro
sepa que lo tenemos
que hacer
¿vale?
eso sería por ejemplo
una cosa que podíais hacer
ahora
vamos a poner
en lugar de Superman
vamos a poner
de Batman
vamos a poner Superman
¿vale?
que este ya lo tenemos visto
super fuerza
super calzones rojos
y rayos láser
y este es de
Krypton
¿se escribe así?
¿Krypton?
hostia
no lo sabía
vale
no sé
Jacob Aylos
me está trolleando
ah no
ah vale
ya decía yo
ya decía yo
bueno
entonces ahora
fíjate que lo ejecutamos
y como hemos inicializado
con el constructor
con esta información
Superman
es un superhéroe
que viene de Krypton
y tiene los siguientes poderes
superfuerza
y rayos láser
¿vale?
entonces
ya lo hemos inicializado bien
hay un tema con esto
y es que
si te fijas
aquí estamos repitiendo
mucho código
estamos empezando
a repetir mucho código
aquí hay
public name
public powers
public planet
name powers
planet
no
estamos repitiendo
esto aquí
esto aquí
y esto aquí
otra vez
estamos repitiendo
tres veces
vale
si quitamos
vamos a quitar el level
porque esto aquí
aunque lo podemos dejar
pero para que lo vean más claro
¿qué podríamos hacer
para evitar
todo este trabajo?
bueno
pues podemos hacer una cosa
que se le llama
básicamente se le llaman
ahora se me ha olvidado el nombre
¿cómo se llama?
promoted properties
joder
no me salía el nombre
promoted properties
las promoted properties
son una cosa especial
de PHP 8
o sea
si utilizas PHP 6
no lo vas a tener
¿y en qué trata
las promoted properties?
básicamente
podemos definir
las propiedades
directamente
en el constructor
sin necesidad
de repetirnos
¿cómo lo hacemos?
bueno
esto lo podemos quitar
ya no lo necesitamos
y aquí en el constructor
lo que tenemos que hacer
es indicar
por un lado
que son público
que esto es público
y que esto es público
y esto
ya no hace falta
¿vale?
ya no hace falta hacer esto
haciendo esto
ya tendríamos
las promoted properties
o sea
ya lo mismo
que estábamos haciendo antes
lo estamos haciendo
pero de una
creo
a ver si esto funciona
sí que funciona
¿vale?
fíjate que funciona
exactamente igual
sin ningún tipo de problema
ya tenemos aquí
public
el name
el power
el planet
y esto
lo que hace
es automáticamente
crear las propiedades fuera
decir que son públicas
y además
hacer la asignación inicial
también
la asignación inicial
que estábamos haciendo
a mano
dentro del constructor
también lo está haciendo
automáticamente
así que
esto se le llaman
promoted properties
y es desde
PHP 8
para que lo tengas
en cuenta
aparte de
igual que teníamos antes
las promoted
ya sea que las promoted properties
o como lo hemos hecho antes
hay un problema
que tenemos
y es que
fíjate
imagínate que tú
por lo que seas
pues creas este super hero
dices
vale esta es la descripción
pero alguien
que es un poco troll
dice
ah sí
pues yo el nombre de este
voy a ponerle que es
Batman
entonces
vale
pues ahora voy a ver
que pasa con esto
el problema de esto
es que como vamos a ver
cuando tú haces
PHP clases
primero te dice que es Superman
luego resulta que alguien
en otra parte del código
modifica el objeto
vale
lo modifica
y ahora resulta que ahora
dice que es Batman
y fíjate que pasa
pues que sí
que te dice que es Batman
entonces
alguien
desde fuera
ha sido capaz de modificar
la información interna
que teníamos aquí
¿cómo podemos evitar esto?
hay diferentes formas
en las que lo podemos evitar
no sé si las promoted properties
lo podemos hacer
pero lo vamos a descubrir ahora
que básicamente es decirle
que sea de solo lectura
vale
le podemos decir
que sea solo de lectura
creo que esto no le gusta
sí que le gusta
vale
sí que le gusta
y fijaos que entonces se queja
y dice
oye
no se puede modificar una propiedad
que es de solo lectura
¿por qué es de solo lectura?
porque sí que lo puedes leer
pero no lo puedes modificar
¿vale?
vas a poder leer
cuál es el valor que tiene
pero no vas a poder modificarlo
ojo
porque hay otro error
que dice que
las propiedades de solo lectura
tienen que tener un tipo
esto también
es lo que antes estaba pensando
que seguramente
íbamos a necesitar
tener ahí puesto
esto quiere decir
que además
tendríamos que decirle
vale
read only
public
y que esto es un stream
y con esto
ahora tampoco
tampoco funciona
porque
dice
vale
porque estoy intentando
modificar por aquí
vale
estoy intentando modificar
está petando por esto
vale
eso es esperable
y ahora sí que está funcionando
y me está dando
que este superman
sería este eco
¿ok?
entonces
sería de lectura
no sería de escritura
esto sería una forma
de hacerlo
pero a veces
no solo queremos esto
no solo queremos
que no se pueda modificar
sino que queremos
que nadie pueda acceder
más allá
dentro de la propia clase
y para eso
le diríamos que es
private
vale
que es privado
así que ahora
lo que vamos a hacer
es que fíjate
ni siquiera lo encuentra
ya te dice
oye
que no está definida
esta propiedad name
es como que no la ve
es como que está
totalmente
transparente
es invisible
a ojos de fuera
dentro
sí que la podemos utilizar
porque fíjate
la estamos utilizando aquí
sin ningún tipo de problema
pero fuera
no podemos acceder a ella
no tiene visibilidad
así que si intentamos
acceder a esto
va a petar
¿vale?
o nos va a dar este error
stack trace
nos dice que name
no puede acceder
porque es una propiedad
privada
¿vale?
así que ya sabéis
ahí no podríamos utilizarlo
porque le hemos dicho
que es privado
luego
para este tipo de cosas
una vez
que ya hemos visto
un poco como funciona esto
lo más interesante
ah
una cosa
una cosa
claro
los tipos
los tipos
porque hemos puesto
esto string
voy a poner que son todos strings
para simplificar
¿vale?
aunque podríamos poner que es array
podemos hacer array
y así os enseño una cosita aquí
con los arrays
vamos a hacer que esto sea un array
¿vale?
super fuerza
vamos a poner aquí
super calzones rojos
y esto
vamos a poner aquí
rayos láser
¿vale?
esto terminaría aquí
¿vale?
vale
pues fijaos en una cosa
aunque pongáis aquí
que esto es un string
un array
un string y tal
ahora porque lo estamos pasando bien
pero si le paso aquí un 1
otra vez el mismo problema
que teníamos antes
lo que va a pasar con esto
ahora me va a dar dos errores
¿vale?
primero porque no puede hacer
una conversión
pero lo intenta
fijaos que está intentando
hacer la conversión
pero esto es porque aquí
estoy intentando
poner estos powers aquí
como si fuese un string
y esto pues obviamente
no funciona
lo que tenemos que hacer
es transformar
este array
en una cadena de texto
vamos a crear aquí un powers
y vamos a decir
utilizar el implote
el implote
es una forma
que tienes
para convertir un array
en cadena de texto
le tienes que indicar
primero
cuál es el símbolo
que vas a utilizar
para separar
cada uno de los elementos
en este caso
vamos a poner una coma
y luego le tienes que pasar
cuál sería
el array
que quieres separar
así que ahora sí
que vamos a poder utilizar
este powers aquí
así
tiene los siguientes poderes
¿vale?
nos lo va a poner
separados en coma
pero bueno
ya nos servirá
super fuerza
super calzones rojos
rayos láser
pero fijaos aquí
que le he pasado un número
cuando yo le he dicho
que era una cadena de texto
y me está haciendo
la transformación
también en las clases
funcionan los tipos
¿vale?
entonces
si queréis que funcionen
los tipos estrictos
tenéis que poner
declare
strict types
igual a uno
y aquí
van ahora sí
se va a quejar
de oye
me estás pasando un número
y tú me has dicho
que esto iba a ser
una cadena de texto
¿qué está pasando?
bueno pues lo arregláis
muy fácil
ponéis cadena de texto
y ya lo tenéis arreglado
pero de nuevo
recordad que si queréis
tener los tipos estrictos
hay que ponerlo arriba
si no
no funcionan
¿vale?
hasta aquí todo bien
lo habéis visto
lo entendéis
¿por qué no lo llaman join?
bueno porque no es el nombre
sería
implode sería el join
y el explode
sería el split
¿vale?
para la gente que sabe
javascript
esa sería un poco
la idea
pero bueno
se llama implode
porque cada lenguaje
de programación
le gusta poner
diferentes nombres
a sus cositas
¿no?
implode de manual
la verdad es que
implode es un nombre
como muy destructivo
sinceramente
te quiero
yo también te quiero
Diego
muchas gracias
implode funciona
para hacer eco
de un objeto
implode
de hecho lo puedes ver aquí
que implode
funciona
con los arrays
y solo con los arrays
lo que pasa es que
cuando hablas de un objeto
claro
en PHP
tenemos los arrays
asociativos
y con un array
asociativo
sí que te funcionaría
pero si hablas
con un objeto
de una clase
no te funcionaría
¿vale?
de hecho ya ves
que el tipo
que acepta
realmente es un array
¿ok?
así que no
puedes usar join
que es un alias
de implode
de implode
es verdad
es verdad
es verdad
que eso es una cosa
que no he comentado
pero
PHP
tiene
en algunos métodos
tiene
aliases
¿vale?
tiene aliases
en este caso
lo podemos ver aquí
a ver
implode
aquí lo tenemos
el join
¿vale?
veis que pone
alias of implode
esto es bastante curioso
porque hay muchos
métodos de PHP
que están como repetidos
supongo que esto lo hacen
de alguna forma
como para
si vienes de otro lenguaje
para que no te sea raro
me imagino
pero
pero sí
esto no es una cosa
que sea muy habitual
en lenguaje de programación
que tengan exactamente
la misma funcionalidad
con otro nombre
es muy raro
que no pasa nada
no sigas
mi dphp te atrapará
no pasa nada
sí o sea
me refería a hacer
eco de superhéroe
otro lenguaje
te imprime la dirección
de memoria por defecto
pero puedes crear
un tostream
para dicha clase

aquí en este caso
podrías crear
como una especie
de tu string
puedes hacer
lo que se le llama
un get object bars
por ejemplo
aquí lo que podemos hacer
mira de hecho
lo voy a hacer en un momento
para que lo tengamos
podríamos hacer
algo así como
no
de fe no
show all
¿vale?
voy a poner show all
puedes hacer un
get object bars
y aquí
este
que os da mucho miedo
el this
que ya lo hemos utilizado
que se refiere
a la propia clase
este show all
lo que haría
sería recuperar
todas las propiedades
del propio objeto
de la instancia
de la clase
y con esto
podrías hacer
por ejemplo
un bar dump
y haces giro
y podrías hacer
show all
y si no he hecho
nada mal
esto debería hacer
que aparezca
toda la información
por ejemplo
del superhéroe
¿ves?
ahí lo teníamos
tendrías toda la información
del superhéroe
sería una forma
de hacerlo
y ya como tienes aquí
lo tienes en un array
esto ya podrías hacer
el implote
y todo lo que tú quieras
esta sería una forma
lo más parecida
que lo tendrías que hacer
¿no?
el this siempre me parece
un lío
pero es que en este caso
es bastante sencillo
porque el this
se refiere a sí mismo
¿no?
o sea
se refiere a esta clase
no hay
no hay nada
no hay nada raro
sino que simplemente
se refiere
al objeto
que se ha creado
y ya está
o sea que no tiene
tanta complejidad
mucho mucho mucho
más fácil de entender
yo creo
mucho más fácil
de entender
pues lo único
que nos queda
por aprender
con las clases
para llevar
al siguiente nivel
nuestra clase
que teníamos
de movie
serían las funciones
estáticas
¿vale?
bueno
los métodos estáticos
porque hay que tener en cuenta
que aunque aquí pone function
a las propiedades
de un objeto
sean propiedades
¿vale?
y a las funciones
de la clase
se le llaman métodos
lo digo porque muchas veces
lo utilizamos indistintamente
pero bueno
para que lo sepáis
entonces solo nos faltarían
los métodos estáticos
que los métodos estáticos
son unos métodos especiales
porque se pueden llamar
se pueden ejecutar
sin necesidad
de crear un objeto
de la clase
ahora lo vas a entender
mucho más fácil
lo que tienes que tener en cuenta
es que obviamente
por eso no puede acceder
a las propiedades
de la clase
vamos a ver un ejemplo
por ejemplo
imagínate que quieres crear
tener aquí
un método estático
¿vale?
así que ponemos public
static function random
y ahora entenderás
exactamente
por qué es estático
en el que queramos
crear un superhéroe
que sea aleatorio
entonces tenemos aquí
como nombres
vamos a poner
Thor
Spider-Man
Wolverine
Iron Man
Hulk
lo que sea
¿vale?
los poderes
vamos a poner aquí
pues yo que sé
super fuerza
volar
rayos
lo que sea
¿vale?
y vamos a poner planets
y a ver qué planetas
Asgard
tierra
tierra
bueno a ver
no hace falta que los repitas
¿vale?
porque ya es el mismo
yo que sé
Hulk
World
y yo que sé
Scripton
lo que sea
vamos a pillar
y esto es interesante
porque así verás
cómo se hacen también
los random
vamos a tener un nombre
aleatorio
¿vale?
de nombres
de los nombres
de estos nombres
vamos a acceder
a una de las llaves
aleatorias
de nombres
es un poco raro
¿vale?
pero es que
ArrayRant
lo que te devuelve
es una llave aleatoria
del ArrayNames
y por lo tanto
esta llave aleatoria
es la que te permite
acceder a ese
valor random
del ArrayNames
¿vale?
o sea
ArrayRant
no te da el valor
te da la llave
lo digo para que entiendas
por qué pasa esto
por eso es así
porque te da la llave
no el valor
si te des el valor
sería perfecto
porque ya lo podríamos
hacer directamente
pero no es el caso
¿vale?
en Power
pues nada
sería exactamente lo mismo
en Planet
sería exactamente lo mismo
y aquí podríamos hacer
Echo
y el superhéroe elegido
aunque no vamos a hacer
esto exactamente
lo que haremos con esto
será crear
un objeto
random
pero bueno
por ahora vamos a hacer
un Echo
¿vale?
para que lo veamos
y ahora
lo que podemos hacer
con esta función
que es
este método
que es estático
importante
estático
es que lo podemos llamar
sin necesidad
de llamar
al New
Super Hero
no hace falta
crear una instancia
esto lo que significa
es que podemos
utilizar
la clase
directamente
Super Hero
¿vale?
y acceder
a este método
random
fíjate
directamente
¿vale?
directamente
Super Hero
dos puntos
dos puntos
no es con el
con el guión
y así
no es así
sino que es
dos puntos
dos puntos
y esto nos permite
acceder
a los métodos
estáticos
fíjate que no estamos
creando
con un nuevo objeto
con la instancia
con el objeto
o sea con el New
y todo esto
los métodos
estáticos
suelen ser muy útiles
por ejemplo
para validaciones
previas
para crear algo
o para tener
información
previa
a utilizar
el objeto
o para información
que puede ser
posterior
y que nos interese
de otros sitios
así que ten en cuenta
esta la diferencia
entre los métodos
estáticos
este sea el método
estático
y luego tenemos
los métodos
que son normales
públicos, privados
o protegidos
que esos
no los vamos a ver
que hay que instanciar
que para eso
pues tenemos aquí el giro
¿vale?
y hay que hacer
no hay un super giro
y aquí tendríamos
el description
esto es
un método
público
¿vale?
y esto sería
un método
estático
no necesitamos
instanciar
la clase
para poder utilizarlo
de hecho
una cosa muy interesante
que se puede hacer
con los métodos
estáticos
que lo vamos a hacer
ahora
lo vamos a hacer
ahora
pero primero
lo vamos a ejecutar
para ver que funciona
que realmente
nos está haciendo
lo que esperamos
¿vale?
ves el superior elegido
es Thor
que viene de Asgard
y tiene los siguientes
poderes
¿vale?
si le damos otra vez
es Iron Man
que viene de Hulk
World
y no sé qué
no sé cuánto
¿vale?
y luego tenemos
Thor
que viene de Asgard
otra vez
con Asgard
Hulk
que viene de
Hulk World
y bla bla
lo que podemos hacer
una cosa muy interesante
con los métodos estáticos
que muchas veces
se pueden utilizar
por esto
independientemente
del lenguaje de programación
es que puedes crear
el objeto
dentro
por ejemplo
aquí en lugar de hacer
un eco
lo que podríamos hacer
es devolver
la propia clase
new self
¿vale?
y pasarle
el nombre
el poder
y el planeta
el self
lo que quiere decir
es que queremos
crear un propio super giro
el self se refiere
a la propia clase
y con esto
ya lo que podríamos tener
aquí es una asignación
del giro
y con el giro
acceder por ejemplo
a la descripción
y fíjate que con todo esto
ya que hemos hecho
esto hay que hacer un eco
¿vale?
de la descripción
ya tendríamos
Spider-Man
Spider-Man es un superhéroe
que viene de Kripton
y tiene los siguientes poderes
¿vale?
lo que hemos hecho
en esta función estática
es
generar
un héroe
aleatorio
y crear una instancia
del objeto
y así es que hemos conseguido
hacer esto
y fíjate
no vas a ver
en ningún momento
un new
desde fuera
de esta clase
podrías crearlo así
con el random
o incluso podrías crearlo
de otra forma
por ejemplo
como vamos a hacer ahora
haciendo una llamada
a una API
lo cual lo hace
súper interesante
pues ya que hemos visto
propiedades
métodos
y todo
vamos a ver
si os parece
con todo lo que hemos aprendido
vamos a poner aquí
vamos a crear clases
vamos a crear
nuestra clase
next movie
y vais a ver
que esto pues va a quedar
bastante bonito
lo primero que vamos a hacer
es declarar
los strict types
¿vale?
vamos a crear
el next movie
y aquí vamos a tener
un public function
y vamos a crear
las promoted properties
que tenemos antes
¿vale?
aquí me está creando
aquí un montón de private
no sé qué
vamos a utilizar private
para que sean privadas
para que nadie pueda
acceder desde fuera
vamos a tener
los días
hasta el lanzamiento
el título de la película
no sé
descripción no tengo
tenemos
el following
production
que ahora sacaremos
exactamente
esa información
el release date
tenemos
el poster URL
tenemos
el overview
que veo que aquí
se me ha olvidado
una coma
¿vale?
y tendríamos también
creo que el release date
ya lo he puesto
bueno pues ya
creo que lo tenemos todo
¿vale?
con esto ya tendríamos
con las promoted properties
no teníamos que repetirlas
más de una vez
esto es a partir de PHP 8
tener cuidado
nos vamos a functions
si vamos a functions
teníamos este
get until message
esto
nos lo vamos a traer
a nuestra clase
y lo vamos a poner aquí
esto obviamente
tenemos que poner
que es public
function
get until message
y la diferencia
es que este days
no se lo vamos a pasar
por parámetro
porque lo bueno
es que ya tenemos aquí
que este days
viene de
this
days
ah no
así
days until
¿vale?
days until
esto lo ponemos así
y ya está
ahora
con esta función
ya la tenemos
la tenemos perfecta
pero otra cosa
que podemos hacer
es tener la función
estática
para crear
la película
¿y por qué va a ser
estática?
porque vamos a querer
hacer el fetching
de datos
de la API
como estamos haciendo aquí
fijaos que aquí
lo que tenemos es
get data
y esto hace llamada
la API
json decode
no sé qué
pues esto
vamos a querer hacer
algo similar
pero diferente
a la vez
en lugar de get data
vamos a poner
fetch
and create movie
aquí le podemos pasar
la API URL
¿vale?
API URL
y esto lo que devolvería
no va a ser un array
sino que va a ser
un next movie
la propia película
una instancia
de la propia clase
de la película
aquí pues
podríamos hacer
lo del resol
esto vamos a utilizar
la API URL
¿vale?
tenemos el json decode
aquí tendríamos
el return data
pero en lugar
de hacer el return data
lo que hacemos
es el return
de lo que hemos hecho antes
y aquí empezamos
a pasarle
toda la información
por ejemplo
del days until
que aquí tendríamos
days until
tenemos que pasarle
pues uno a uno
beta
days until
quiero pensar
que más o menos
más o menos
es así
aunque creo
que aquí este
no es así
a ver
expected
en alguno
se me ha colado
algo aquí
¿está como?
¿puede ser?
no
alguno se me ha colado
alguna cosa
a ver
vale
¿por qué se me ha colado aquí?
¿qué se me ha colado?
se me ha colado algo
que no veo
¿qué se me ha colado
que no veo?
se me ha colado
ah
porque puede ser
que necesite directamente
ponerle el nombre
o sea decirle
lo que tiene que ser
o sea ponerle
los dos puntos
¿puede ser que tenga
que ser así?
no
a ver
os voy a leer
porque
punto y coma
después del return
¿dónde he puesto
el punto y coma?
¿aquí?
ah
coño
que no lo veía
tío
madre mía
que no lo veía
el típico punto y coma
el típico punto y coma
que no lo veía
vale
ahora si ves
me pone los seis
que esperaba los seis
vale
vamos a ponerlos todos
el primero es el days until
es un poco raro
que sea el days until
vamos a poner primero el title
porque tiene más sentido
que el primero sea el título
que es como el más importante
vale
vamos a poner aquí
el data
el title
days until
following production
release date
el posterior
el overview
vale
y yo creo que con esto
están todos
lo que
lo que
si un clásico
un clásico del tema
que se te olvide
ahí los puntos y coma
vale
lo importante
es que aquí
en following production
en realidad esto
vamos a sacar solo
el título
de la próxima película
y vamos a ponerle
un
nullish collection operator
que también está
en php
de forma que si no hay
próxima película
que le ponga desconocido
vale
por si no sabe
cuál es la siguiente película
esto en el caso
de que title
que esto sea null
lo que hará es
ponerle un valor
por defecto
si hemos hecho
todo bien
si hemos hecho
todo bien
que ahí tengo
dudas
y también vamos a añadir
la función
que he hecho antes
hemos hecho aquí
una función
que era la de
get all
esta
show all
esta la vamos a recuperar
pero vamos a cambiarle
el nombre
le vamos a poner
get data
para recuperar
los datos
y hay algo similar
a la de estructuración
saludos midu
algo similar
a la de estructuración
es que lo más similar
por ejemplo
es lo del extract
porque el extract
justamente hace eso
que lo desestructura
lo que estás haciendo
es separar
y recuperar
solo los que necesitas
no sé si el extract
que ahí tengo dudas
no
estaba pensando
si el extract
se le podían pasar
los que querías
pero veo que no
se le pueden poner
los operadores
me lo dicen
por ahí en el chat
que sí que hay
que sí que hay
el list
vale
pues vamos a ver
el list
list
el list
a ver
vamos a ver
cómo funciona
el list
list
pero el list
list
php.net
también es list
variable
no sé qué
vamos a poner aquí
el ejemplo
ah es que el php 7.3
joder
cómo ha mejorado el list
pues sí
o sea exactamente
con list
le puedes poner aquí
directamente las variables
list in all variables
o sea que sería algo parecido
al extract
pero le puedes poner
directamente aquí
las variables
aquí tendríamos
el array
aquí serían
por posición
también puedes saltártelos
como lo pone aquí
o sea que te puedes saltar
uno de en medio
o el primero
como hace este
vale
además también lo puedes utilizar
en un bucle
puedes hacer
o sea los puedes
nestear
uno dentro del otro
vale
claro
como puedes hacer
la desestructuración
es un poco diferente
en el sentido
o sea no hay
es una desestructuración
pero es a través
de un método
no es a través
de la sintaxis
como se haría
en el caso
de javascript
o sea en este caso
es como una función
que lo que haces
es asignar
a los parámetros
que tú le pasas
y tal
pero bueno
está bien
igualmente
lo que
ah bueno
dice
como array
no es realmente
una función
aunque lo parece
que es lo que estoy diciendo
que parece una función
que no parece
la sintaxis
pero verdad
que es un language construct
esto es una cosa
que hace un montón
php
de hecho es eso
como array
que array
lo puedes utilizar
también como si fuesen
corchetes
o lo puedes utilizar
como si fuese un método
pero que no es un método
realmente
aunque le pases
parámetros
y todo esto
y también
lo que me
quería saber
era
si podías hacerlo
con arrays asociativos
que esa es mi duda
mi duda
de
list and order
or index and directions
¿sabes?
si lo puedes hacer
con arrays asociativos
que ahí
es donde
tengo
la duda
associative
array
que me parece
que no
me parece
que no se puede
hacer
con arrays asociativos
lo vieron
yo sé que sí
si hasta a mí
visita la doc oficial
de vez en cuando
¿por qué sientes pena
en usarla?
claro que no
joder
solo faltaba
solo faltaba
solo faltaba
que os entendáis más
pues mira
está bien saberlo
vale
vamos a ver si esto funciona
vamos a ver si esto funciona
nos vamos por aquí
y
vamos al index
vamos al index
¿qué es lo que vamos a hacer aquí?
en lugar de
en lugar de hacer este
get data
no sé qué
no sé cuánto
con las funciones
lo que vamos a hacer es
require
once
nos vamos a traer las
de clases
next movie
vale
y aquí
vámonos
vamos a utilizar
el next movie
next movie
next movie
fetch and create movie
con el API URL
aquí lo bueno es que
podríamos ya utilizarlo
para lo que nos dé la gana
y del next movie
vamos a sacarle
los datos también
una vez que ya lo tenemos
utilizamos el get data
y estos datos
son los que le vamos
a pasar
a nuestras funciones
y con esto
si lo hemos hecho
todo bien
deberíamos tener
nuestra función
que
nos falta
el until message
vale
porque el until message
ya no está aquí
pero sí que deberíamos
poder sacarlo
del método
que hemos creado
get until message
y ahora
vale
también
bueno
aquí me he podido olvidar
el following production
por ejemplo
following production
¿ves?
he puesto
producting
y es production
¿vale?
production
following production
following production
a ver
API URL
API URL
y vamos a poner
tu tu tu
following production
following production
vale
following production
estamos por aquí
aquí
que me he equivocado
del nombre
para que
lo veamos bien
vale
y
template
en el 8
vamos a ver otra cosa
que nos falta por aquí
en el 8
el release date
puede ser que el release date
ni siquiera lo hayas puesto
sí que lo he puesto
release date
release date
dice
la siguiente es
cannot access topic
en la función
8
template main array
on string
template main
php
en la función
en la línea 9
la siguiente
ah
este
es este
puede ser
vale
aquí todavía
hay alguna cosa
que no he hecho bien
en el following production
todavía hay algo
que no he hecho bien
ah
porque
porque es que
he sacado el title
vale
podríamos
vamos a dejar el title
que tiene sentido
y aquí
es que podemos
directamente
acceder
así
y ya lo tendríamos
vale
y ahora sí que lo tenemos
ahora sí que lo tenemos
vale
pues con esto
lo que hemos conseguido
es básicamente
sacar todo esto
a una clase
simplificar
o
más que simplificar
lo que
esto nos permite
es que nuestra aplicación
crezca
con control
tenemos aquí dentro
todos los métodos
además un método estático
donde estamos haciendo
la llamada
que le podemos pasar
cualquier parámetro
para que haga la llamada
a otra API
totalmente diferente
lo cual ya al menos
estaríamos
teniendo la posibilidad
de separar mejor esto
y si el día de mañana
pues queremos apuntar
a otra API
pues hacerlo muy fácilmente
hemos podido agrupar
la función
del get until message
que tiene sentido
que esté aquí dentro
y además
tenemos la construcción
que podríamos validar
los datos
cuando se estamos construyendo
y así evitar
si por lo que sea
esta información
no es correcta
antes de crear
podríamos mirar
si la API
está contestando
correctamente
lanzar una excepción
y cosas así
y luego construir
correctamente
nuestra película
y renderizarla
además hemos separado
todo esto
en templates
que no sean funciones
todo ahí puesto
a saco
y con esto
ya hemos mejorado
bastante
nuestro código
de PHP
aprendiendo
en su paso
funciones
clases
y un montón
de cosas más
bueno amigos
que tal
me acabo de fijar
en el número
de espectadores
no nos ha gustado
nada PHP
no nos ha gustado
nada PHP
que ha pasado
una duda
mi
los métodos estáticos
mejor hacerlos
a la clase
superhéroe
o en otra
casa aparte
donde están
todos los métodos
estáticos
no
tiene sentido
la clase
de superhéroe
no
tiene sentido
la clase
superhéroe
no hace falta
que esté
en todos
los métodos
estáticos
yo creo que
donde tenía sentido
el tema
del contexto
la línea 30
de index
que hace
exactamente
vamos a verlo
la línea 30
de index
el index
no tiene línea 30
se queda en la 16
o sea que no sé
lo que ha pasado
les agobió el disk
puede ser
es porque es PHP
bueno pues no haremos
más de PHP
no pasa nada
la verdad
sinceramente
sobre el tema
de los cursos
creo que no voy a
no voy a hacer más cursos
en Twitch
es una cosa
que he estado pensando
porque creo que la gente
en Twitch
me ha pasado últimamente
que siempre que he hecho cursos
la gente no los valora mucho
los cursos en Twitch
creo que en Twitch
más probar cosas
hablar de cosas
esas cosas
sí que parece que es mejor
porque puedo estar más pendiente
del chat
pero el tema de cursos
yo creo que los voy a mover
todos a la plataforma
esa que
que digo que vamos a hacer
de suscriptores
que va a ser como más pequeño
para que la gente
los tenga más ahí
y ya está
porque yo sinceramente
claro a la gente
le gusta más los chismes
no y lo puedo entender
porque más entretenido
y así nos lo pasamos mejor
y hablamos
vemos más tecnología
comentamos cosas
probamos cosas
o sea sí que podemos programar
pero más
mientras lo comentamos
en cambios de PH
o sea por ejemplo
cursos
ya todos los cursos
que hemos ido haciendo
a no ser que sean cursos
como desde cero
que al final
se hace como muy
muy aburrido
¿no?
porque siempre es curso
desde cero
no sé qué
y no sé
yo creo que al final
creo que no
en sí
no es que le guste
sino que creo que
como es curso
y queda guardado
claro pues por eso
que como queda guardado
pues tampoco tiene mucho sentido
¿no?
al final
o sea que mejor
si va a quedar guardado
y la gente lo va a buscar guardado
pues entonces mejor
lo guardamos directamente
y no lo hacemos en Twitch
porque al final
hacerlo en directo
es un poco raro
es un poco raro
hacerlo en directo
cuando lo podría preparar mejor
hacerlo con cortes
y todo este tipo de cosas
no creo que sea por el hate
de PHP
es porque a lo mejor
yo creo que
si no es como
vender la idea
de que es un curso
muy desde cero
aprende programación
desde cero y tal
creo que a lo mejor
la gente
el tener una clase
de dos horas
y eso me hace replantearme
el bootcamp
la verdad
sinceramente
porque me da la sensación
que el bootcamp
la primera clase del bootcamp
vendrá a mucha gente
pero la siguiente
irá bajando
hasta
y eso me pasó
en el bootcamp ya
cuando hicimos
la Github Actions
que me parece
la mejor clase del bootcamp
vino muy poca gente
vino en 200 personas
y no es porque venga
poca gente
sino es por decir
joder
es que entonces
lo hubiera grabado
que lo hubiera hecho mejor
y más tranquilo
y ya está
que no tener que hacerlo
dos horas seguidas
que los cursos
al final es un tema
de pensar que
estar dos horas
concentrado con un curso
intentar hacerlo bien
y tal
es complicado
la primera clase
aprende javascript
y no mucha gente
claro claro
es por eso
porque la primera clase
viene mucha gente
sabes
claro
pero el vídeo de youtube
de la Github Actions
es una borracha
estoy convencido
o sea
estoy
estoy
estoy
estoy de acuerdo contigo
pero
en directo
muy poca gente
lo vio
entonces creo
está bien
porque yo lo puedo
reutilizar en vídeo
en youtube
pero es que lo hubiera grabado
tranquilamente
poco a poco
en mi casa
que a lo mejor
hubiera quedado mejor
y lo hubiéramos subido
y ya está
lo bueno es que
hacer cursos en directo
es que nos puedes aclarar dudas
eso sí
yo creo
y por eso lo haría
por eso lo hago
porque a mí me gusta
y creo que puede ser
valorable al máximo
para que lo hagamos en directo
y que la gente venga
y tenga dudas
y así pues
a lo mejor no las puedo leer
todas
pero que sí que pueda leer
los primeros y tal
patrocinio de php
ojalá
te imaginas
pero es que
los errores del directo
también se aprende
de hecho
resolver un error en live
para mí
tiene mucho más valor
sí sí
eso puede ser
pero también piensa
que puede ser
mucho peor
porque imagínate
hago un error
estoy 10 minutos
arreglando el error
en vídeo también
puedes cometer el error
y explicar como lo arreglas
que tampoco es
que no lo vayas a poner
y todo esto
pero quizás es lo mismo
hacer un curso grabado
y después en un directo
ver dudas
bueno sí
pero a lo mejor ya
retramite los cursos
pregrabados
de otros horarios
hostia
eso es buena idea
para aprovechar
y ya está
sino un directo
de sesiones de dudas
de tus cursos
bueno no sé
y por qué no preparas
los cursos con vídeos grabados
y luego en twitch
con preguntas dudas
no porque eso sí que
yo creo que triunfaría
todavía menos
o sea la gente
se aburriría mucho más
porque tendrías que tener
como el contexto
del anterior
si hiciese eso
sería más
rollo
directos
para suscriptores
sabes
que creo que se pueden hacer
en twitch
para hacerlos como
en directo
midu
piensa en los bootcamps
que se van a quedar
sin trabajo
sin tus cursos
eso sí puede ser
eso puede ser
bueno
ah mira
se puede volver a ver
hostia amigue
pues pasa el enlace
que lo compartiremos
yo el bootcamp
lo veo
aquí un alumno
sí sí
pero que creo que la gente
al principio
se anima mucho
y luego ya
claro
hay mucho
mucho trabajo
que tienes que hacer
pero la gente
ya no lo
solo habrá chisme
en twitch
no
por ejemplo
el desarrollo de la velada
me gusta
pero lo hacemos
esperando la clase
tres pesos filipinos
sonriente
pesos filipinos
que grande
bueno pues nada amigos
nos vemos mañana
cuídense mucho
sean buenos
a los que os haya gustado el curso
gracias por venir
a los que habéis venido
mañana vamos a tener
charla de
vamos a estar charlando
justamente de cositas
vamos a ver también
os intentaré explicar
algunas cosas
del tema de versell
vale
que sé que tenéis muchas ganas
y espero y deseo
que os guste
lo que se viene
que se vienen cositas
la semana que viene
voy a lanzar algo
que he estado trabajando
un montón
que espero que os guste
así que mañana
igual os doy alguna pistilla
al respecto
así que nada
nos vemos mañana amigos
cuídense mucho
y no dejen de mover las manitas
y darle cariño a php
hombre
que pobrecito
ese lenguaje
que está moviendo la mitad
de internet
y vosotros no lo queréis
darle amor
un abrazo amigos
muchas gracias a todos
cuidaos
hasta luego