Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

parametros entre funciones o entre clases

Estas en el tema de parametros entre funciones o entre clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos les tengo una consulta, se puede pasar un parametro a una funsion que sea el resultado de una funcion. ejmplo. tengo la siguiente ...
  #1 (permalink)  
Antiguo 30/04/2010, 09:34
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo parametros entre funciones o entre clases

Hola amigos les tengo una consulta, se puede pasar un parametro a una funsion que sea el resultado de una funcion.

ejmplo. tengo la siguiente funcion dentro de una clase llamada cliente.

function getMarcas()
{
$obj_marca=new sQuery();
$result=$obj_marca->executeQuery("select base_s.tab_marcas.MarCIVI AS CIVI,base_s.tab_marcas.Marnombre AS marcas from base_s.tab_marcas");
return $result;
}
la idea que el resultado de esta funcion me permita hacer otra funcion donde tenga otra consulta a mi bd y se limite a los resultados de la primera funcion getMArcas.

es posible?? como lo podria hacer, mil gracias
  #2 (permalink)  
Antiguo 30/04/2010, 09:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

No entiendo tu pregunta, pero sí es posible pasar parámetros entre funciones o métodos de clases:
Código PHP:
Ver original
  1. class foo {
  2.        public function bar($msg) {
  3.              echo $msg;
  4.        }
  5. }
  6.  
  7. $foo = new foo();
  8. $foo->bar("baz");

Saludos.
  #3 (permalink)  
Antiguo 01/05/2010, 08:06
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

Hola GATORV, gracias por responder.

voy a explicarme un poco mas haber si me logro hacer entender.

1) en la primera funcion de mi clase CLIENTE, por medio de ella obtengo todas las marcas de vehiculo que pueda tener en una tabla de mi bd, pero aún no se a que cliente le pertenece uno de estos vehiculo.

2)en mi segunda funcion muestro todos los clientes que tengo en mi bd.

mi idea es, o mi consulta mejor dicho es, como puedo hacer una funcion donde me traiga todos los clientes con su respectivas marcas de vehiculo que tienen asignados, teniendo como relacion el codigo del vehiculo y del cliente.

en sql seria una consulta asi:

select a.nombre,b.marcas
from cliente as a, tbla_marcas as b
where a.id_cliente=b.id_cliente
and a.id_marcas=b.id_marcas


pero como fusiono ambas funciones para que me de el resultado que espeor?

me creo una tercera funcion?? , como le paso el id_cliente o el id_marcas a esta tercera funcion para hacer la consulta?

espeo haberme explicado mejor amigo, mil gracias por tu ayuda.
  #4 (permalink)  
Antiguo 01/05/2010, 23:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

De hecho ahi en ese caso necesitarias una tercer clase que se encargue de crear los objetos marcas y clientes.

Saludos.
  #5 (permalink)  
Antiguo 02/05/2010, 16:37
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

Hola GatorV, me podrias ejemplificar lo que me dices por favor, soy demasiado nuevo en poo, tengo a penas 3 dias tratando de aprender esta forma de programar y aun no manejo bien los terminos.

mil gracias GatorV...

saludos.
  #6 (permalink)  
Antiguo 02/05/2010, 23:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

Solo es crear una tercer clase que en su logica pueda instanciar ambas clases en base a los parámetros que requieres.

De hecho por ejemplo si usaras programación en 3 capas (MVC) esa es la tarea del modelo, crear objetos que representen tus entidades en la base de datos para poderlas mostrar en la vista.

Saludos.
  #7 (permalink)  
Antiguo 04/05/2010, 07:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

Hola GatorV.

gracias por contestar.

fijate como lo estoy haciedo y la duda que tengo ahora es que no me muestra nada por pantalla, ni siquiera un error.

class Cliente
{


function getClientes()
{
$obj_cliente=new sQuery();
$result1=$obj_cliente->executeQuery("select * from cliente"); // ejecuta la consulta para traer al cliente
return $result1; // retorna todos los clientes
}

function getMarcas()
{
$obj_afinidad=new sQuery();
$result2=$obj_afinidad->executeQuery("select * from cliente_canal_afinidad"); // ejecuta la consulta para traer al cliente
return $result2; // retorna todas la afinidades
}

function getTodo($result2) //
{
$obj_todo=new sQuery();
$result3=$obj_todo->executeQuery("select cliente.nombre,canal_afinidad.descripcion_canal_af inidad from cliente_canal_afinidad,canal_afinidad,cliente where cliente_canal_afinidad.id_cliente_canal_afinidad=' " .$result2. "' and cliente.id_cliente=cliente_canal_afinidad.id_clien te"); // ejecuta la consulta para traer al cliente
return $result3; // retorna todos los clientes+afinidad
}
}

echo "<br/><br/><table border=1>
<td>Nombre</td>
<td>Afinidad</td>";

$dame = new Cliente();
$dame= $dame->getTodo($result2);
while ($row=mysql_fetch_Array($dame)) // recorre los clientes uno por uno hasta el fin de la tabla
{

echo "<tr>";
echo "<td class=EstiloTexto align=\"center\">".$row['nombre']."</td>";
echo "<td class=EstiloTexto align=\"center\">".$row['descripcion_canal_afinidad']."</td>";

}
echo "</table>";
?>

estoy pasandole el resul a la funcion, que estoy haciendo mal amigo.

gracias.
  #8 (permalink)  
Antiguo 04/05/2010, 08:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

Pero donde defines $result2? O sea la pasas como parámetro a tu función pero en ningún lado veo que la definas en tu código... o sea es null y por ende por eso te debe de generar algún error.

Saludos.
  #9 (permalink)  
Antiguo 05/05/2010, 06:47
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

la verdad que no logro entender como defino o en donde defino el parametro, lo que no entiendo es que si es el resultado de una funcion, tengo que declarar la variable $result2 fuera de la funcion, para poder trabajar con ella??


no entiendo he buscado como definir parametros de una funcion o algun ejemplo que me pueda ayudar visualmente a comprender lo que me indicas y nada, ya estoy q no halla como hacer.
  #10 (permalink)  
Antiguo 05/05/2010, 07:31
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

amigos GatorV, despues de tanto darle, lo he logrado hacer asi:

<?php
include("conexion.php");

class Cliente
{
var $nombre; //se declaran los atributos de la clase, que son los atributos del cliente
var $apellido;
var $cedula;
var $fecha_nacimiento;
Var $id_cliente;


function getClientes()
{
$obj_cliente=new sQuery();
$result1=$obj_cliente->executeQuery("select * from cliente"); // ejecuta la consulta para traer al cliente
return $result1; // retorna todos los clientes
}

function getMarcas()
{
$obj_afinidad=new sQuery();
$result2=$obj_afinidad->executeQuery("select id_cliente,id_canal_afinidad from cliente_canal_afinidad"); // ejecuta la consulta para traer al cliente
//while ($row=mysql_fetch_Array($result2)){
//$variable1="".$row['id_cliente']."";
//$variable2="".$row['id_canal_afinidad']."";
//}
return $result2; // retorna todas la afinidades
}

function getTodo() //
{
$result = new Cliente();
$result=$result->getMarcas();
while ($row=mysql_fetch_Array($result)){
$obj_todo=new sQuery();
$result3=$obj_todo->executeQuery("SELECT cliente.nombre,canal_afinidad.descripcion_canal_af inidad
FROM canal_afinidad,cliente
WHERE canal_afinidad.id_canal_afinidad=".$row['id_canal_afinidad'] ."
AND cliente.id_cliente=".$row['id_cliente'] .""); // ejecuta la consulta para traer al cliente
return $result3; // retorna todos los clientes+afinidad
}
}
}

echo "<br/><br/><table border=1>
<td>Nombre</td>
<td>Afinidad</td>";

$dame = new Cliente();
$dame= $dame->getTodo();
while ($row=mysql_fetch_Array($dame)) // recorre los clientes uno por uno hasta el fin de la tabla
{
if ($colorfila==0){
$color= "#FFFFFF";
$colorfila=1;
}
else{
$color="#F0F0F0";
$colorfila=0;
}
echo "<tr>";
echo "<td bgcolor='".$color."' class=EstiloTexto align=\"center\">".$row['nombre']."</td>";
echo "<td bgcolor='".$color."' class=EstiloTexto align=\"center\">".$row['descripcion_canal_afinidad']."</td>";

}
echo "</table>";
?>

el problema que tengo ahora es que solo me sale un resultado es como si le faltara un while o un for en algun lado
  #11 (permalink)  
Antiguo 05/05/2010, 07:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

Pues sin ver como es tu función $obj_todo->executeQuery no te podría decir porque solo te lista un resultado.

Por otro lado pasar parámetros es sencillo solo los declaras:
Código PHP:
Ver original
  1. function foo($bar)
  2. {
  3.        echo "hola " . $bar;
  4. }
  5.  
  6. $param = "fulano";
  7. foo($param);

Ahí puedes ver como pasar la variable $param dentro de la función, en POO es igual:
Código PHP:
Ver original
  1. class foo
  2. {
  3.         public function bar($param)
  4.         {
  5.                  return "hola " . $param;
  6.         }
  7. }
  8.  
  9. $param = "fulano";
  10. $foo = new foo();
  11. echo $foo->bar($param);

Por otro lado en tu clase, no es necesario que inicialices el mismo objeto dentro de tu función, para eso existe el puntero $this:
Código PHP:
Ver original
  1. class name
  2. {
  3.          private $_name;
  4.  
  5.          public function setName($name)
  6.          {
  7.                  $this->_name = $name;
  8.          }
  9.  
  10.          public function getName()
  11.          {
  12.                  return $this->_name;
  13.          }
  14.  
  15.          public function sayHello()
  16.          {
  17.                  echo "hello " . $this->getName();
  18.          }
  19. }
  20.  
  21. $name = new name();
  22. $name->setName("fulano");
  23. $name->sayHello();

Saludos.
  #12 (permalink)  
Antiguo 05/05/2010, 08:11
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

ok GatorV, mil gracias por responder y aclararme las dudas que tengo en este momento.

mira este es la forma que tengo el sQuery


class sQuery // se declara una clase para poder ejecutar las consultas, esta clase llama a la clase anterior
{

var $pconeccion;
var $pconsulta;
var $resultados;
function sQuery() // constructor, solo crea una conexion usando la clase "Conexion"
{
$this->pconeccion= new Conexion();
}
function executeQuery($cons) // metodo que ejecuta una consulta y la guarda en el atributo $pconsulta
{
$this->pconsulta= mysql_query($cons,$this->pconeccion->getConexion());
return $this->pconsulta;
}
function getResults() // retorna la consulta en forma de result.
{return $this->pconsulta;}

function Close() // cierra la conexion
{$this->pconeccion->Close();}

function Clean() // libera la consulta
{mysql_free_result($this->pconsulta);}

function getResultados() // devuelve la cantidad de registros encontrados
{return mysql_affected_rows($this->pconeccion->getConexion()) ;}

function getAffect() // devuelve las cantidad de filas afectadas
{return mysql_affected_rows($this->pconeccion->getConexion()) ;}
}
  #13 (permalink)  
Antiguo 05/05/2010, 09:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

El problema esta dentro de tu función getTodo() ya que haces un while, y dentro de ese while haces un return, si quieres listar todo te recomiendo hagas mejor un query sin condiciones WHERE para que te regrese todos los resultados.

Saludos.
  #14 (permalink)  
Antiguo 05/05/2010, 13:18
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

GatorV, mil gracias por responder nuevamente.

me surgue el siguiente problema al quitar el where entonces pierdo la consulta de la funcion anterior precisamente el problema surguia porque necesito que la funcion trabaje con el resultado de la primera funcion.

gracias gatorv.

saludos cordiales.
  #15 (permalink)  
Antiguo 05/05/2010, 13:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

Si entonces solo te da un resultado no lo hagas dentro de un while, simplemente descarga el resultado usando mysql_fetch_array().

Saludos.
  #16 (permalink)  
Antiguo 06/05/2010, 07:04
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

amigo GatorV, segui la sugerencia que bien me hicistes el dia de ayer colocandolo de la siguiente forma.

public function getTodo() //
{
$result = new Cliente();
$result=$this->getMarcas();
if($row1=mysql_fetch_Array($result)){
$obj_todo=new sQuery();
$result3=$obj_todo->executeQuery("SELECT cliente.nombre,canal_afinidad.descripcion_canal_af inidad
FROM canal_afinidad,cliente,cliente_canal_afinidad
WHERE cliente_canal_afinidad.id_canal_afinidad=canal_afi nidad.id_canal_afinidad
AND cliente_canal_afinidad.id_cliente=cliente.id_clien te
AND cliente.id_cliente=".$row1['id_cliente']."
AND canal_afinidad.id_canal_afinidad='".$row1['id_canal_afinidad']."'"); // ejecuta la consulta para traer al cliente
return $result3; // retorna todos los clientes+afinidad
}
}
pero obtuve el mismo resultado amigo solo me muestra por pantalla un solo resultado de los 10 que deberia presentar. alguna otra idea o sugerencia que me pueda ayudar amigo?

gracias GatorV.
  #17 (permalink)  
Antiguo 06/05/2010, 07:37
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

amigo GatroV, lo resolvi de la siguiente forma.

public function getTodo() //
{
//$result = new Cliente();
$result=$this->getMarcas();
while($row=mysql_fetch_Array($result)){
$id_cl.=$row['id_cliente'].",";
$id_ca.=$row['id_canal_afinidad'].",";
}
$tamano1=strlen($id_cl);
$tamano2=strlen($id_ca);
$id_cl=substr($id_cl,0,$tamaño1-1);
$id_ca=substr($id_ca,0,$tamaño2-1);

$obj_todo=new sQuery();
$result3=$obj_todo->executeQuery("SELECT cliente.nombre,canal_afinidad.descripcion_canal_af inidad
FROM canal_afinidad,cliente,cliente_canal_afinidad
WHERE cliente_canal_afinidad.id_canal_afinidad=canal_afi nidad.id_canal_afinidad
AND cliente_canal_afinidad.id_cliente=cliente.id_clien te
AND cliente.id_cliente in ($id_cl)
AND canal_afinidad.id_canal_afinidad in ($id_ca)"); // ejecuta la consulta para traer al cliente
return $result3; // retorna todos los clientes+afinidad

}
}

ya me funciona perfectamente.
Amigo mil gracias por la ayuda brindada de verdad.

ahora te tengo otra consulta como puedo modificar la clase que se encarga de conectarme con la bd para que pueda conectarse a dos bases de datos diferentes.

cual es el problema que tengo GatorV, es que tengo dos bd y necesito consultar tablas de una y de otra y quiero si se puede hacer que la misma clase que estoy utilizado ahorita me permita esa conexion.
por otro lado si se puede como controlo por cual bd voy hacer mi consulta?
  #18 (permalink)  
Antiguo 06/05/2010, 08:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

Pues sin ver el código de tu función no te podría indicar como la tienes que modificar, aunque no creo que sea mucho ya que simplemente es que uses diferentes parámetros para conectarte (diferente user, password, host).

Saludos.
  #19 (permalink)  
Antiguo 06/05/2010, 08:44
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

asi lo hago amigo:

<?
class Conexion // se declara una clase para hacer la conexion con la base de datos
{
var $con;
function Conexion()

{
// se definen los datos del servidor de base de datos
$conection['server']="localhost"; //host
$conection['user']="root"; // usuario
$conection['pass']="yyyyy"; //password
$conection['base']="xxxxx"; //base de datos


// crea la conexion pasandole el servidor , usuario y clave
$conect= mysql_pconnect($conection['server'],$conection['user'],$conection['pass']);



if ($conect) // si la conexion fue exitosa , selecciona la base
{
mysql_select_db($conection['base']);
$this->con=$conect;
}
}
function getConexion() // devuelve la conexion
{
return $this->con;
}
function Close() // cierra la conexion
{
mysql_close($this->con);
}

}
class sQuery // se declara una clase para poder ejecutar las consultas, esta clase llama a la clase anterior
{

var $pconeccion;
var $pconsulta;
var $resultados;
function sQuery() // constructor, solo crea una conexion usando la clase "Conexion"
{
$this->pconeccion= new Conexion();
}
function executeQuery($cons) // metodo que ejecuta una consulta y la guarda en el atributo $pconsulta
{
$this->pconsulta= mysql_query($cons,$this->pconeccion->getConexion());
return $this->pconsulta;
}
function getResults() // retorna la consulta en forma de result.
{return $this->pconsulta;}

function Close() // cierra la conexion
{$this->pconeccion->Close();}

function Clean() // libera la consulta
{mysql_free_result($this->pconsulta);}

function getResultados() // devuelve la cantidad de registros encontrados
{return mysql_affected_rows($this->pconeccion->getConexion()) ;}

function getAffect() // devuelve las cantidad de filas afectadas
{return mysql_affected_rows($this->pconeccion->getConexion()) ;}
}
?>
  #20 (permalink)  
Antiguo 06/05/2010, 10:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: parametros entre funciones o entre clases

Pues tendrías que re-hacer la parte de la definición de tu clase para que acepta parámetros, en lugar de definirlos dentro de la clase, ya que al estar definidos dentro de tu clase pues al crear el objeto usa esos parámetros.

Saludos.
  #21 (permalink)  
Antiguo 06/05/2010, 14:02
 
Fecha de Ingreso: septiembre-2007
Mensajes: 318
Antigüedad: 16 años, 7 meses
Puntos: 1
De acuerdo Respuesta: parametros entre funciones o entre clases

GatorV, como siempre gracias, modificare la funcion y te comentare si funciono.

saludos...
  #22 (permalink)  
Antiguo 07/05/2010, 16:44
 
Fecha de Ingreso: abril-2010
Mensajes: 17
Antigüedad: 14 años
Puntos: 5
Respuesta: parametros entre funciones o entre clases

Muy Productivo este tema de discucion... Sr Gator muchas Gracias.... Espero que siempre tenga esa pasciencia para respondernos ........

Saludos desde Peru...

Etiquetas: clases, funciones, parametros
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 03:15.