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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?  (Leído 4,212 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« en: 7 Noviembre 2021, 00:23 am »

Es decir:
Código
  1. function F($dato)
  2. {
  3.      if($dato viene de una variable)
  4.      {
  5.             echo 'el parámetro viene de una variable';
  6.      }
  7.      else
  8.      {
  9.            echo 'el parámetro viene de una constante';
  10.      }
  11. }
  12.  

Ejecuciones:
Código
  1. F(700); // el parámetro viene de una constante
  2.  
  3. $variable = 700;
  4. F($variable); // el parámetro viene de una variable
  5.  

¿Cómo harían esto?


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #1 en: 7 Noviembre 2021, 05:24 am »

No tiene mucho sentido. En el momento en el que lo pasas a una función, el parámetro se vuelve una variable.


Ni siquiera debug_backtrace() te dice como se ha pasado el valor. Puedes forzar a que te pasen solo variables requiriendo los parámetros por referencia:

Código
  1. function  F (&$dato) {}

Esto tiraría un fatal error si se le pasa una constante, pero también tienes el problema de que ahora la variable está referenciada y cualquier cambio afecta a nivel global.

También puedes buscar si el valor está definido en las $GLOBALS por tanto ahí sabrías que tienes una variable con ese valor... pero ni es fiable ni recomendable.


¿Por qué quieres saber de donde viene?

Saludos


« Última modificación: 7 Noviembre 2021, 05:33 am por #!drvy » En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.673


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #2 en: 7 Noviembre 2021, 15:53 pm »

Hola, una manera que se me ocurre tomando tu código de ejemplo, sería la siguiente:

Código
  1.  
  2. $variable = NULL;
  3. F(700);
  4. $variable = 700;
  5. F($variable);
  6.  
  7. function F($dato)
  8. {
  9.    if(!is_null($dato))
  10.    {
  11.        echo 'el parametro viene de una variable';
  12.        $variable = NULL;
  13.    }
  14.    else
  15.    {
  16.        echo 'el parametro viene de una constante';
  17.    }
  18. }
  19.  


Saludos
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.349


Ver Perfil
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #3 en: 7 Noviembre 2021, 16:39 pm »

La definición de una función no contempla constantes.
El usuario cuando no quiere que el contenido de un dato sea modificado dentro de la función, es reponsable de mandar una copia, lo que técnicamente es lo mismo que una constante, pero de forma transparente a la función. Porque dentro de la función no se sabe el origen de la misma.

De hecho uno podría hacer todas estas cosas:
Código:
entero = declaracion de funcion Y(entero valor)
   valor +=2
   devolver valor modulo 5
fin funcion

...
...
...

constante de entero x = 25
entero z

z= funcion Y(25)   // técnicamente se está recibiendo una constante inicializada durante la llamada.
...
fin funcion

z= x
z = funcion Y(z)  // es una constante si se pasa como valor, aunque al final el retorno se le entrega a 'z' y acaba así cambiando de valor.
...
fin funcion

z= 25
z= funcion Y(z +0)  //técnicamente se está recibiendo una constante, resultante de la suma de z + un valor constante... que se guardará en la pila, y que en origen tampoco se podrá rescatar.
...
fin funcion

z= funcion Y(x +3)  // igual que anterior, aunque es la suma de dos constantes.
...
fin funcion

z= 7
z= funcion Y(x + z + 3)   // igual que anterior... cuando procede de una expresión es lo mismo que si fuera una constante.
...
fin funcion

Como puedes entender, indistintamente de que se pase en ocasiones por valor o por referencia, una constante, no es meramente aquello que está declarado como constante, puede asumirse que es constante, si el cambio de dicha variable dentro de la función, a la vuelta de la función no afecta a la de origen. Una función no necesita saber que pasa fuera de ella, solo precisa saber que se hace dentro, para eso tiene el código preciso de lo que debe hacer. Si resultara vital saber si una variable es o no una constante (no se me ocurre a bote pronto, ningún caso donde esto deba ser necesario, ni siquiera útil), podría añadirse un parámetro adicional que así lo detalle, pero no hay garantias  de que el usuario tenga que 'decir' la verdad...
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #4 en: 7 Noviembre 2021, 18:52 pm »

Hola, una manera que se me ocurre tomando tu código de ejemplo, sería la siguiente:

Código
  1.  
  2. $variable = NULL;
  3. F(700);
  4. $variable = 700;
  5. F($variable);
  6.  
  7. function F($dato)
  8. {
  9.    if(!is_null($dato))
  10.    {
  11.        echo 'el parametro viene de una variable';
  12.        $variable = NULL;
  13.    }
  14.    else
  15.    {
  16.        echo 'el parametro viene de una constante';
  17.    }
  18. }
  19.  


Saludos

Este código no funciona.

Dudo mucho que haya una situación en la que importe si el argumento es una literal o una variable. Al menos no en PHP.
En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.673


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #5 en: 7 Noviembre 2021, 19:06 pm »

Si es posible que no funcione porque no estoy desde una PC para probarlo o un hosting y los intérpretes online son un tanto pesados desde un móvil y además algunas veces funcionan de una manera inesperada.

Pero básicamente el código de ejemplo que he dejado es una posible forma que se lo podría hacer.


Saludos
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #6 en: 7 Noviembre 2021, 20:53 pm »

Si es posible que no funcione porque no estoy desde una PC para probarlo o un hosting y los intérpretes online son un tanto pesados desde un móvil y además algunas veces funcionan de una manera inesperada.

Pero básicamente el código de ejemplo que he dejado es una posible forma que se lo podría hacer.


Saludos

Yo creo que a final de cuentas tu ejemplo es una manera manual para confirmar si es una variable o literal.

E.g.

Código
  1. function test($valor, $estasUsandoVariable){
  2.   if($estasUsandoVariable) {
  3.     echo 'El valor es una variable';
  4.   } else {
  5.     echo 'El valor es una literal';
  6.   }
  7. }
  8.  
  9. $variable = 700;
  10. test(700, false);
  11. test($variable, true);

Lo cual no contesta la pregunta realmente...
En línea

elmascato

Desconectado Desconectado

Mensajes: 4



Ver Perfil WWW
Re: [Pregunta]: ¿Cómo hago para saber si un parámetro viene de una variable o una constante?
« Respuesta #7 en: 13 Noviembre 2021, 12:25 pm »

Tú siempre vas a recibir una variable en la función, ya que tiene que ser un dato dinámico. Dentro de la misma función es donde deberías definir el tipo en el que quieres incorporar esos datos, en una variable o en una constante
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines