Foros del Web » Programando para Internet » PHP »

[funciones] parece algo sencillo pero no sé

Estas en el tema de [funciones] parece algo sencillo pero no sé en el foro de PHP en Foros del Web. Hola a todos: miren tengo este código: Código PHP: <?php $x  =  prueba  (); print_r  ( $x ); echo  "<br><br>" ; function  prueba  ( $a ...
  #1 (permalink)  
Antiguo 13/11/2003, 17:21
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
[funciones] parece algo sencillo pero no sé

Hola a todos:
miren tengo este código:
Código PHP:
<?php
$x 
prueba ();
print_r ($x);
echo 
"<br><br>";
function 
prueba ($a=1$b=2$c=3$d=4$e=5){
  
$arr = array($a$b$c$d$e);
  return 
$arr;
}
?>
como se dan cuenta la función prueba tiene 5 argumentos con valores predefinidos... lo que yo quiero es simplemente modificar el tercero pero que el resto no se modifiquen... me dira´n es facil... solo haz esto $x = prueba (1, 2, $valor, 3, 4, 5) ... pero lo que complica esto es que una función parecida esta dentro de una clase y dicha función tiene 17 parametros predefinidos y solo quiero modificar unos 5 que veces estan salteados... ¿como hago? escribo toooodos los parametros y cambio los que debo cambiar o hay otra forma mas fácil y práctica???... estuve intentando entre muchas cosas esto:
Código PHP:
$x prueba (,,,4); 
pero nada de nada... ¿que debo hacer???

Gracias a todos y éxitos en sus proyectos...
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
  #2 (permalink)  
Antiguo 14/11/2003, 04:18
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Oye... es esa es una muy buena pregunta... he probado y probado además de buscar y nada!

Si ves al manual,
http://www.php.net/manual/es/functio...uments.default
éste dice:
Cita:
"...cuando se usan parámetros por defecto, estos tienen que estar a la derecha de cualquier parámetro sin valor por defecto; de otra manera las cosas no funcionarán de la forma esperada.
Por eso si en el ejemplo con 5 parámetros pasas menos de 5 así:

$x = prueba (6,7);

Cambiará los valores por defecto de $a y $b (que son las dos primeras de la izquierda) y mantiene por defecto las de la derecha.

O sea que, por ahora sólo se me ocurre que si sabes cuáles parámetros van a cambiar, pongas esos a la izquierda... así no tendrás problemas... aunque me imagino que ya pensaste en esto...

Saludos

Última edición por jpinedo; 14/11/2003 a las 04:27
  #3 (permalink)  
Antiguo 14/11/2003, 07:13
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
hola paisano... claro que si he visto esa posiblidad pero lo que pasa es que aveces los parámetros que se cambian son salteados... e alli el problema... bueno, al parecer no va a quedar otra que copiar todos los parámetros...

saludos y exitos en todos tus proyectos...
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
  #4 (permalink)  
Antiguo 14/11/2003, 08:05
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Bueno, lo que yo haria seria una de estas 2 cosas:

- Pasar los parametros en un array asociativo nombre/valor:
Código PHP:
function ($param=array()) {
  
$valores=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); // los valores por defecto de los parametros
  
foreach ($param as $clave => $valor) {
    
$valores[$clave]=$valor;
  }
  
// y luego usamos ese array para los parametros
  
echo $valores['a'];
  
// o hacemos un extract() para tenerlos como variables
  
extract($valores);
  
$calculo=$a*$b-$c;
  echo 
$calculo;
}

(array('c'=>55,'a'=>2)); 
Por supuesto, se puede añadir la comprobacion de que los indices de $param existen en el array $valores.

- O en caso de existir un valor 'no valido' para el parametro (por ejemplo 0 o ''), pasar ese valor para los que no quieres pasar que estan entre otros que quieres pasar:
Código PHP:
function f($a=1,$b=2,$c=3,$d=4,$e=5) {
  if (
''==$a$a=1;
  if (
''==$b$b=2;
  if (
''==$c$c=3;
  if (
''==$d$d=4;
  if (
''==$e$e=5;

  
$calculo=$a*$b-$c;
  echo 
$calculo;
}

f('',33,'',44); 
La "pega" es que tienes que modificar el cuerpo de la funcion.

Saludos.

PD: El codigo lo he puesto segun salia de mi cabeza. Puede que haya otras formas.

PD2: Quizas haya mas info en http://www.php.net/manual/en/function.func-get-args.php
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 14/11/2003, 09:14
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 14 años, 4 meses
Puntos: 0
gracias josemi...
creo que la segunda opción es mas adecuada para mi caso...
saludos y éxitos...
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:39.