PHP - Funcion con o sin parametros

   
Vista:

Funcion con o sin parametros

Publicado por Gonzalo (338 intervenciones) el 08/09/2014 18:40:06
tengo este problema, tengo una clase con una funcion que podria o no recibir parametros, dependiendo si no se pasaron parametros regresa una cadena de texto, si recibe parametros este DEBE ser un array (indice, valor) con datos tipo string, si recibe el array debe mostrarlo como tabla.

ya tengo tiempo con este problema y no resuelvo como hacer esta funcion, si me pueden ayudar les agradeceria mucho ya que no pude hacer funcionar el func_get_args(), les dejo un ejemplo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class MiClase
{
functiion Problema()
{
if(func_num_args()>0)
{
//funciona bien con variables individuales
//no encuentro como mostrar el array
}else
{
echo('no params');
}
}
}
 
$MyPar1="1 solo parametro";
$MyPar2=array("uno"=>"diez","dos"=>"veinte");
 
$f=new MiClase();
 
$f->Problema(); //si funciona
 
$f->Problema($MyPar1); // si funciona
 
$f->Problema($MyPar1,$MyPar1,$MyPar1); // si funciona
 
$f->Problema($MyPar2);// no encuentro como hacerlo funcionar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Funcion con o sin parametros

Publicado por Ignacio (15 intervenciones) el 13/09/2014 04:16:36
Hola Gonzalo, si andas algo perdido en ese tema, podrías buscar información sobre sobrecarga de métodos en PHP.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion con o sin parametros

Publicado por Gonzalo (338 intervenciones) el 15/09/2014 16:45:38
Gracias don ignacio.

tendras un ejemplo de como hacer funcionar ese metodo?

salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion con o sin parametros

Publicado por Ignacio (15 intervenciones) el 15/09/2014 23:25:44
Según he leído en PHP no existe sobrecarga de métodos como en otros lenguajes, por ejemplo Java, así que una forma de hacer sobrecarga de métodos en PHP sería utilizando el método mágico
1
__call()

Utilizaré tu código para hacer el ejemplo. He comentado un poco el código para que se entienda mejor, espero que te sirva.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
class MiClase
{
	function problemaSinArgumento()
	{
		echo "Numero de argumentos: " . func_num_args() . "<br>";
	}
 
	function problemaConUnArgumento($argumentos)
	{
		echo "Numero de argumentos: " . count($argumentos) . "<br>";
		foreach($argumentos as $argumento)
			echo $argumento . "<br>";
	}
 
	function problemaConDosArgumentos($argumentos)
	{
		echo "Numero de argumentos: " . count($argumentos) . "<br>";
		foreach($argumentos as $argumento)
			echo $argumento . "<br>";
	}
 
	function problemaConTresArgumentos($argumentos)
	{
		echo "Numero de argumentos: " . count($argumentos) . "<br>";
		foreach($argumentos as $argumento)
			echo $argumento . "<br>";
	}
 
	function problemaConUnArgumentoArray($argumentos)
	{
		echo "Numero de argumentos: " . count($argumentos) . "<br>";
		echo "<table border = 1>";
		echo "<tr>";
		echo "<th>cabecera1</th>";
		echo "<th>cabecera2</th>";
		echo "</tr>";
		foreach($argumentos as $argumentos)
			foreach($argumentos as $clave => $valor)
			{
				echo "<tr>";
				echo "<td>" . $clave . "</td>";
				echo "<td>" . $valor . "</td>";
				echo "</tr>";
			}
		echo "</table>";
	}
 
	/**
	* El método __call() recibe:
	* como primer parámetro: $metodo, string que contiene el nombre de un método, en este caso "problema".
	* como segundo parámetro: $argumentos, array que contiene los argumentos con los que fue llamada el método "problema" (ninguno, uno, dos, tres o un array).
	* 
	* Funcionamiento: llamará a los distintos métodos de la clase "MiClase": 
	* 	-problemaSinArgumento()
	*	-problemaConUnArgumento()
	*	-problemaConDosArgumentos()
	*	-problemaConTresArgumentos()
	*	-problemaConUnArgumentoArray()
	* según el número de argumentos con el que se llame a la funcion problema.
	**/
	function __call($metodo, $argumentos)
	{
		// Se utiliza "count($argumentos)" para contar el número de elementos que contiene el array "$argumentos".
		// El array "$argumentos" contiene todos los argumentos con los que fue llamada el método "problema()".
		if($metodo == "problema" && count($argumentos) == 0)
			$this->problemaSinArgumento();
		// "!is_array($argumentos[0]" comprueba si el primer elemento del array "$argumentos" es un array. 
		// En este caso no debe serlo, porque se está usando "$f->problema($myPar1);" y "$myPar1" es un string.
		else if($metodo == "problema" && count($argumentos) == 1 && !is_array($argumentos[0]))
			$this->problemaConUnArgumento($argumentos);
		else if($metodo == "problema" && count($argumentos) == 2)
			$this->problemaConDosArgumentos($argumentos);
		else if($metodo == "problema" && count($argumentos) == 3)
			$this->problemaConTresArgumentos($argumentos);
		// "is_array($argumentos[0])" comprueba que el primer elemento del array "$argumentos" es un array.
		// En este caso debería serlo, porque se está usando "$f->problema($myPar2);" y "$myPar2" es un array.
		else if($metodo == "problema" && count($argumentos) == 1 && is_array($argumentos[0]))
			$this->problemaConUnArgumentoArray($argumentos);
	}
}
 
$myPar1="1 solo parametro";
$myPar2=array("uno"=>"diez","dos"=>"veinte");
 
$f=new MiClase();
 
//$f->problema(); // sin argumento
 
//$f->problema($myPar1); // un argumento
 
//$f->problema($myPar1,$myPar1); // dos argumentos
 
//$f->problema($myPar1,$myPar1,$myPar1); // tres argumentos
 
$f->problema($myPar2); // un argumento array
?>

Descomenta cada llamada al método problema, para ver la salida del código, según el número de argumentos utilizado en la llamada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion con o sin parametros

Publicado por Gonzalo (338 intervenciones) el 15/09/2014 23:38:02
muy interesante, lo voy a estudiar, gracias.

funcionará de esta manera?

function myproc()
{
$f=new MiClase();

$f->problema($myPar1); //matrix de datos.

echo("1,2,3,4,5");

$f->problema(); // sin argumento
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion con o sin parametros

Publicado por Ignacio (15 intervenciones) el 15/09/2014 23:50:54
¿Qué valor tiene $myPar1? Si es $myPar1=array("uno"=>"diez","dos"=>"veinte"); funcionará igual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar