elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Pregunta]: ¿Por qué me dice que la variable no está definida?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Por qué me dice que la variable no está definida?  (Leído 2,183 veces)
Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
[Pregunta]: ¿Por qué me dice que la variable no está definida?
« en: 12 Diciembre 2019, 18:28 pm »

Buenos días,

estoy un poco confundido ya que PHP me está diciendo que una variable no existe. (que estoy definiendo claramente)

Código
  1. <?php
  2. $dato = 'este es el dato';
  3.  
  4. function Mirar()
  5. {
  6. echo $dato;
  7. }
  8.  
  9. Mirar();
  10. ?>
  11.  

La variable es global y está fuera de la función y luego se usa ahí...


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Por qué me dice que la variable no está definida?
« Respuesta #1 en: 12 Diciembre 2019, 18:39 pm »

Porque el scope de PHP es únicamente dentro de la función. Tendrías que poner:

Código
  1. <?php
  2. $dato = 'este es el dato';
  3.  
  4. function Mirar()
  5. {
  6.        global $dato;
  7. echo $dato;
  8. }
  9.  
  10. Mirar();
  11. ?>

Hay algunas variables que las puedes acceder de cualquier lado (super globales) pero las demas necesitan ser tratadas cuidadosamente.


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: [Pregunta]: ¿Por qué me dice que la variable no está definida?
« Respuesta #2 en: 13 Diciembre 2019, 01:23 am »

No utiliceis la keyword global. En todo caso utilizar el array $GLOBALS[$miVariable]

Por 3 motivos. El primero es la propia definición de lo que es el alcance global y el conflicto con otros lenguajes. De por si la variable definida en el código fuera de un cuerpo es global por definición PHP incluído que es del que hablo. En cambio al añadir la keyword global la haces "global" para que sea accesible desde otros cuerpos lo cual no tiene ningún sentido lógico., ya era global. Teniendo en cuenta que PHP hoy en día es utilizado conjuntamente/interactuando con otros lenguajes, crea una sintaxis poca intuitiva que puede hacer creer a desarrolladores de otros lenguajes y del propio PHP algo erroneo, que la variable no era global previamente, lo cual no es cierto.
 El segundo es la eficiencia en velocidad y uso de memoria. Según tests que he estado viendo, es mucho más lento que su contraparte $GLOBALS[$miVariable].
 Los scopes están diseñados para mejorar la seguridad e integridad del código y componentes externos. Si no es estrictamente necesario o conveniente modificar el scope, no debe hacerse. Está bien seguir el concepto de encapsulación aunque no se trabaje con objetos. Hace el código mucho más escalable, mantenible y menos propenso a errores.

Siguiendo los mismos criterios es más adecuado pasar la variable como argumento. O en caso de ser posible integrar la obtención de datos y su posterior destrucción (automática) en la propia función. Es decir:

Código
  1. <?php
  2.  
  3. function MirarDato()
  4. {
  5. $dato = 'este es el dato';
  6. echo $dato;
  7. /* $dato se destruye. Se puede usar static si se desea conservar trás finalizar la ejecución o retornarlo. Por ejemplo un contador. */
  8. }
  9.  
  10. MirarDato();
  11. ?>
No suele ser lo adecuado, pero es correcto.


Código
  1. <?php
  2. $dato = 'este es el dato';
  3.  
  4. function Mirar($argumento)
  5. {
  6. echo $argumento;
  7. }
  8.  
  9. Mirar($dato);
  10. ?>
La opción más lógica. Crear una función que sirva para mirar el contenido de su argumento. Se puede añadir manejo de errores.


Código
  1. <?php
  2. $argumentoAPasar = 'este es el dato';
  3.  
  4. function Mirar($argumento)
  5. {
  6. return $argumento;
  7. }
  8.  
  9. $dato = Mirar($argumentoAPasar);
  10. echo $dato;
  11. ?>
Tiene sentido si se va a trabajar con el dato y modificarlo.
« Última modificación: 13 Diciembre 2019, 01:35 am por @?0!,5^34 » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [Pregunta]: ¿Por qué me dice que la variable no está definida?
« Respuesta #3 en: 13 Diciembre 2019, 10:13 am »

Tambien puedes usar funciones anonimas que hereden variables.

Código
  1. <?php
  2.  
  3. $sushi = 'maki';
  4.  
  5. $eat = function($nombre) use ($sushi) {
  6.    echo $nombre, ' se esta comiendo un ', $sushi;
  7. };
  8.  
  9. $eat('Miguel'); // Miguel se esta comiendo un maki.


De todos modos, todo esto es mala práctica, una funcion deberia tomar argumentos y tener una salida. No heredar variables ni depender de externas. Si acaso, usa OOP.

https://en.wikipedia.org/wiki/Pure_function

Saludos
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: ¿Por qué me dice que la variable no está definida?
« Respuesta #4 en: 14 Diciembre 2019, 21:59 pm »

¿Si usara constantes?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como imprimir el valor de una variable definida en una variable...
Scripting
nhaalclkiemr 5 6,398 Último mensaje 3 Mayo 2007, 17:58 pm
por sirdarckcat
for i variable no definida
Programación Visual Basic
rubeng 4 1,799 Último mensaje 13 Agosto 2007, 00:11 am
por rubeng
error :winsock1 variable no definida
Programación Visual Basic
saliaz 3 2,355 Último mensaje 23 Septiembre 2009, 15:58 pm
por fary
Me pone que una variable no esta definida y no se porque (JS)
Desarrollo Web
robertito_prado 2 2,206 Último mensaje 15 Junio 2012, 08:45 am
por robertito_prado
Variable HTTP_HOST no definida. Porque?
PHP
Skeletron 8 3,593 Último mensaje 7 Mayo 2013, 02:13 am
por Skeletron
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines