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

Llamar a una función de una clase dentro de la función de otra clase

Estas en el tema de Llamar a una función de una clase dentro de la función de otra clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo la clase iniciada, que contiene funciones, ejemplo: Código PHP: $miclase -> mifuncion ( $var );  el caso es que quiero hacer una llamada a ...
  #1 (permalink)  
Antiguo 22/04/2010, 04:01
 
Fecha de Ingreso: marzo-2008
Mensajes: 96
Antigüedad: 16 años
Puntos: 0
Llamar a una función de una clase dentro de la función de otra clase

Tengo la clase iniciada, que contiene funciones, ejemplo:
Código PHP:
$miclase->mifuncion($var); 
el caso es que quiero hacer una llamada a esa función dentro de otra función de otra clase, pero no parece funcionar. Cual sería el método adecuado?

Ejemplo:

Código PHP:
class segundaclase
{

    function 
laotrafuncion($parametros)
    {
        
$miclase->mifuncion($var);
    }

  #2 (permalink)  
Antiguo 22/04/2010, 04:23
 
Fecha de Ingreso: octubre-2005
Mensajes: 240
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Cuando haces referencia a un atributo de la clase, dentro de la clase propiamente dicho, tienes que usar el $this.

$this->mifuncion($var);

Saludos
  #3 (permalink)  
Antiguo 22/04/2010, 04:26
 
Fecha de Ingreso: marzo-2008
Mensajes: 96
Antigüedad: 16 años
Puntos: 0
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Cita:
Iniciado por urameshix Ver Mensaje
Cuando haces referencia a un atributo de la clase, dentro de la clase propiamente dicho, tienes que usar el $this.

$this->mifuncion($var);

Saludos

No, no, lo que quiero es usar la función de otra clase.
Tengo la clase1 con la función1, y la clase2 con la función2. Creo una instancia de la clase1 y en la función2 de la clase2, quiero hacer una llamada a la función1 de la clase1. ¿Cómo lo haría?
  #4 (permalink)  
Antiguo 22/04/2010, 08:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Pues tienes de dos formas, la primera es pasando como parametro la instancia de tu clase 2:
Código PHP:
Ver original
  1. class clase2
  2. {
  3.        function foo($bar)
  4.        {
  5.                $bar->func();
  6.        }
  7. }
  8.  
  9. $class1 = new class1();
  10. $class2 = new class2();
  11. $class2->foo($class1);

O instanciando dentro de tu clase la clase dos:
Código PHP:
Ver original
  1. class clase2
  2. {
  3.           public function foo()
  4.           {
  5.                    $bar = new clase1();
  6.                    $bar->func();
  7.           }
  8. }
  9.  
  10. $class2 = new class2();
  11. $class2->func();

Saludos.
  #5 (permalink)  
Antiguo 22/04/2010, 18:48
 
Fecha de Ingreso: diciembre-2006
Mensajes: 60
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Código:
class segundaclase extends primeraclase
{ 

    function laotrafuncion($parametros) 
    { 
        $this>mifuncion($var);  
    } 
}
puedes extender la primera clase para usar sus variables y metodos
saludos
  #6 (permalink)  
Antiguo 23/04/2010, 05:33
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

No, no puedes extender mecánicamente las clases para tener / reusar atributos o métodos de una clase... solo puede haber herencia si hay una relación de parentesco entre ambas clases, de lo contrario no se puede.

Este es un error muy común cuando no se tiene experiencia en POO.



Cita:
Iniciado por black_palma Ver Mensaje
Código:
class segundaclase extends primeraclase
{ 

    function laotrafuncion($parametros) 
    { 
        $this>mifuncion($var);  
    } 
}
puedes extender la primera clase para usar sus variables y metodos
saludos
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 24/04/2010, 16:04
Lak
 
Fecha de Ingreso: abril-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Cita:
Iniciado por enriqueplace Ver Mensaje
No, no puedes extender mecánicamente las clases para tener / reusar atributos o métodos de una clase... solo puede haber herencia si hay una relación de parentesco entre ambas clases, de lo contrario no se puede.

Este es un error muy común cuando no se tiene experiencia en POO.
Eso es completamente falso. Si se puede extender una clase padre para obtener de ella, sus métodos.

Deberías de leer más acerca de extends en POO.

Código PHP:
<?php
class ClaseHija extends ClasePadre {
 
 var 
$atributo

 function 
MetodoHijo () {
   
self::$atributo ClasePadre::MetodoPadre();
   return 
self::$atributo;
 }

}
?>
Además, este comentario

Cita:
Este es un error muy común cuando no se tiene experiencia en POO.
Me parece algo muy despectivo de tu parte. Deberías de tener un poco más de respeto por los demás usuarios.
  #8 (permalink)  
Antiguo 24/04/2010, 16:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

A lo que se refiere enriqueplace es que no debes de extender por extender, para extender una clase debe de tener una relacion directa, el se refiere más a problemas de diseño de clases, ya que hay muchos programadores que se dedican a heredar por heredar, y luego acaban teniendo problemas de diseño.

Saludos.
  #9 (permalink)  
Antiguo 24/04/2010, 18:10
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Lak, pecas igual o más de ignorante (y no lo digo en todo de insulto, lo digo con causa):
  1. No lees lo que expongo, sigues cometiendo el mismo error que detallo, hacer herencia mecanicamente está CONCEPTUALMENTE EQUIVOCADO, las clases deben siempre tener una relación de parentesco
  2. TECNICAMENTE HABLANDO puedes hacer herencia de cualquier cosa, pero si tu haces que Perro herede de Avion porque quieres usar métodos que esta clase usa, ESTÁ EQUIVOCADO, esa herencia no se puede hacer!
  3. Usas código PHP4, está en desuso, debes usar PHP5

Me remito a las fuentes: el Principio de Liskov
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 25/04/2010, 12:51
 
Fecha de Ingreso: abril-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
De acuerdo Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Cita:
Iniciado por enriqueplace Ver Mensaje
Lak, pecas igual o más de ignorante (y no lo digo en todo de insulto, lo digo con causa):
  1. No lees lo que expongo, sigues cometiendo el mismo error que detallo, hacer herencia mecanicamente está CONCEPTUALMENTE EQUIVOCADO, las clases deben siempre tener una relación de parentesco
  2. TECNICAMENTE HABLANDO puedes hacer herencia de cualquier cosa, pero si tu haces que Perro herede de Avion porque quieres usar métodos que esta clase usa, ESTÁ EQUIVOCADO, esa herencia no se puede hacer!
  3. Usas código PHP4, está en desuso, debes usar PHP5

Me remito a las fuentes: el [URL="http://phpsenior.blogspot.com/2007/10/herencia-de-clases-y-el-principio-de.html"]Principio de Liskov[/URL]
totalmente con enrique y gatorv, las cosas se deben hacer de una manera correcta para no tener problemas futuros
  #11 (permalink)  
Antiguo 25/04/2010, 14:35
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Llamar a una función de una clase dentro de la función de otra clase

Cita:
Iniciado por Lak Ver Mensaje
Deberías de leer más acerca de extends en POO.
Deberías leer más acerca de la herencia en POO.

"entends" es solo una palabra clave de algunos --no todos-- lenguajes, usualmente para realizar dicha herencia.


Cita:
Iniciado por Sancas Ver Mensaje
No, no, lo que quiero es usar la función de otra clase.
Si tu clase en verdad es solo una clase y no un objeto, puedes acceder a un método si éste es estático; una tercer forma a lo expuesto por GatorV:
Código PHP:
Ver original
  1. class clase2
  2. {
  3.           public function foo()
  4.           {
  5.                    $bar = clase1::func();
  6.           }
  7. }
  8.  
  9. $class2 = new clase2();
  10. $class2->foo();

www.php.net/language.oop5.static

Con la nota, las clases no deben verse como contenedores de funciones, eso no es POO.
__________________
I ♥ The Music!

Etiquetas: clase, llamar
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 17:46.