Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Servia en 28 Marzo 2009, 13:23 pm



Título: ¿Llamar a una función que está dentro de una clase?
Publicado por: Servia en 28 Marzo 2009, 13:23 pm
No puedo creer que no esté en algun tuto de aquí, en el buscar no me salió nada así que como lo hago para llamar a una función que se encuentra dentro de una class?

Código
  1. <?php
  2. class prueba1{
  3. function irf(){}
  4. function fc5(){
  5. }
  6. function rastrear($ip, $destino){
  7. }
  8. }
  9. $own=$prueba1->fc5();
  10. echo $own;
  11. ?>

De esa forma me dice que
Fatal error: Call to a member function fc5() on a non-object.


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: eLank0 en 28 Marzo 2009, 14:03 pm
Tendrías que crear un objeto de la clase en cuestión y luego usar los métodos de la clase.

s2


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Servia en 28 Marzo 2009, 14:59 pm
Me podrías pasar la url de un tuto para ello?


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: ^Tifa^ en 28 Marzo 2009, 15:13 pm
Mas bien Servia no se trata de un tuto de POO  en PHP, sino de la forma real como trabaja la POO en cualquier lenguaje que tiende a ser la misma.

No tienes claro  el concepto de POO y sino tienes eso claro, de poco sirve explicarte como realizar algo y vayas en la vida realizandolo como un robot memorizadamente pero sin saber a ciencia cierta porque debo realizar eso así....

Yo te recomendaria que leas un tuto tecnico sobre que es Orientado a Objetos para que puedas comprender sobre el tema. Sobre tu peticion, si conocieras sobre la POO sabrias que tienes que declarar un objeto nuevo que se encargue de instanciar los metodos que contiene la clase de la cual creaste el objeto nuevo.

Código
  1.  
  2. <?php
  3.  
  4. class prueba1{
  5.  
  6. public function irf(){
  7.  
  8. }
  9.  
  10. public function fc5(){
  11.  
  12.    echo "Hola Mundo<br>";
  13. }
  14.  
  15. public function rastrear($ip, $destino){
  16.  
  17. }
  18. }
  19.  
  20. $own = new prueba1();
  21. $own->fc5();
  22.  
  23. ?>
  24.  
  25.  

Todo lo que esta dentro de una clase por defecto es privado he inacesible al codigo externo a no ser que declares las cosas como public dentro de la clase, así podrias llamar sus objetos sin problema.


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Servia en 28 Marzo 2009, 16:02 pm
Gracias, pues si puedes pásame un tuto que creas que está bien :P


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: cassiani en 28 Marzo 2009, 17:31 pm
o.O

pues ya te han dicho chico, public ;) lo demás es leer por aquí (http://www.google.co.ve/search?hl=es&q=php+orientado+a+objetos&btnG=Buscar+con+Google&meta=) o por allá (http://www.google.co.ve/search?hl=es&q=php+poo&btnG=Buscar+con+Google&meta=) ..


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Servia en 28 Marzo 2009, 18:02 pm
Ahora tengo otro problemilla con las funciones :(
Código
  1. <?
  2. function vaciar(){
  3.  
  4. }
  5. }
  6. ?>
  7.  <label>
  8.  <input type="button" onclick="<? $vaciar="hazlo"; ?> name="Submit" value="Vacíar Papelera" />
  9.  </label>
  10.  </p>
  11. <p>
  12. <?
  13. if($vaciar == "hazlo") {
  14. vaciar();
  15. }
  16. ?>

Se ejecuta aunque no se pulse el botón, que hago mal?


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Spider-Net en 28 Marzo 2009, 18:59 pm
Pues lo que haces mal es intentar programar en un lenguaje sin estudiarlo antes. Está claro que no tienes nada claro ni como funciona PHP ni como funciona la programación orientada a objetos ni siquiera el html así que antes de empezar a programar deberías empezar por estudiar unos cuantos tutoriales.
Lo que estás haciendo es dar palos de ciego... pones algo y pruebas a ver si funciona y si no lo hace vienes al foro a que te digan como se hace bien y esto no funciona así.


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: eLank0 en 28 Marzo 2009, 20:25 pm
Cualquier tutorial de POO en PHP te servirá...


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: ^Tifa^ en 28 Marzo 2009, 20:53 pm
Se supone que tiene que ejecutarse la funcion, porque acaso no la haz colocado como primera opcion dentro de tu codigo?????  :-\ 

Tampoco vayas a pretender que colocando la funcion debajo del codigo html y llamandola dentro del html te va a funcionar....

Como bien dice Spider-Net y como te he venido diciendo yo misma, sino tienes el concepto de un tema es imposible que lo manejes. La programacion no es precisamente algo de observar por arriba uno o dos ejemplo de codigo y ya pensarse yo puedo hacer eso y comenzar a escribir cosas similares sin saber a ciencia cierta que se esta realizando en realidad....

Yo siendo tu, antes de ponerme a tirar lineas de codigo sin saber nisiquiera porque si coloco una funcion de cabecera se ejecuta esta aun sin yo llamarla... que eso ya es mucho decir  :¬¬  lee amigo, leer no hace mal a nadie, y todo en la vida tiene instrucciones de manejamiento no hay nada por mas inteligentes que seamos que manejemos de primera sin conocer las instrucciones.


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: дٳŦ٭ en 28 Marzo 2009, 23:56 pm
El ejemplo que puso la wapa tifa (:-*) te sirve... tienes que crear tu instancia y luego llamar tu función. Leete un tuto de lo basico de POO en PHP. Suerte


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: WHK en 29 Marzo 2009, 04:06 am
Código
  1. <?php
  2.  
  3. class prueba1{
  4. function irf(){ }
  5. function fc5($saludo){
  6.  echo 'test<br />';
  7.  return $saludo;
  8. }
  9. function rastrear($ip, $destino){ }
  10. }
  11.  
  12. $own = prueba1::fc5('hola');
  13. echo $own;
  14. ?>


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: ^Tifa^ en 29 Marzo 2009, 07:27 am
Código
  1.  
  2. <?php
  3.  
  4. class prueba1{
  5.  
  6. function irf(){ }
  7.  
  8. function fc5($saludo) {
  9.  
  10.  echo 'test<br />';
  11.  return $saludo;
  12.  
  13. }
  14.  
  15.  
  16. function rastrear($ip, $destino)  {
  17.  
  18. echo $ip . "  " . $destino;
  19.  
  20. }
  21.  
  22. }
  23.  
  24. $own = prueba1::fc5('hola');
  25. echo $own;
  26.  
  27. echo prueba1::rastrear('12', 'Mexico');
  28.  
  29. ?>
  30.  
  31.  
  32.  

Que logica tiene programar lo anterior? para ir llamando funciones una por una, mejor que no programe orientado a objetos... porque la etica de programar con POO es precisamente sacarle provecho a las 3 reglas basicas (Polimorfismo, Encapsulamiento, Herencia). Y con ese ejemplo... la verdad, para hacerlo asi mejor que no programe en PHP en POO y que haga todo estructurado. No le den consejos negativos a este chico, que aparenta que no quiere leerse 1 solo tuto de PHP y si le ponen ejemplos como los anteriores... la verdad animaran a su ego de aplicar una sintaxis erronea dentro de un perfil ya establecido. No vamos a querer que otros desarrolladores comienzen a criticar su codigo o si????


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Spider-Net en 29 Marzo 2009, 11:32 am
Estoy totalmente de acuerdo con ^TiFa^. No tiene sentido crear clases y métodos, usar programación orientada a objetos y luego llamar a la función directamente "trampeándolo". Para eso te haces un archivo php con todas las funciones y luego las llamas directamente, no tiene sentido crear clases para luego no instanciarlas ni utilizarlas correctamente...


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Nakp en 29 Marzo 2009, 18:19 pm
eso, es común en java, cuando decides completamente POO te toca hacer este tipo de cosas, que en java viene siendo llamar métodos estáticos :rolleyes:

ejemplo

Código
  1. class Color{
  2.  public $rojo = '#FF0000';
  3.  public $verde = '#00FF00';
  4.  public $color = '';
  5.  
  6.  function set_color($color){
  7.    $this->color = $color;
  8.  }
  9. }

ahora... para que coños quiero yo un objeto de tipo color si solo quiero los colores? xD

salu2


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: ^Tifa^ en 29 Marzo 2009, 19:42 pm
El concepto es precisamente no tratar de trapear o camuflear algo como el estilo del ejemplo expuesto.. porque si vamos todos programando asi, entonces se pierde la realidad de lo que debe cumplirse en la POO.

No confundir $this con que esta llamando funciones y decir es lo mismo como que yo haga clase::funcion(parametro) porque this tiene otro proposito. Dentro de una clase bien estructurada los metodos y los atributos tienen una relacion ya que estan encapsulados dentro de la misma clase.. pero mirando el ejemplo posteado lo que se esta haciendo es una programacion estructurada con intento de camuflaje en un lenguaje orientado a objetos y eso la verdad... teoricamente esta mal, no se aplica y no existe. Es como querer mezclar sintaxis de C y C++ a la vez... eso no te hace mega groso ni mas poderoso, eso esta mal, y hay que respetar las cosas como estan establecidas solo eso.


Título: Re: ¿Llamar a una función que está dentro de una clase?
Publicado por: Nakp en 29 Marzo 2009, 20:34 pm
El concepto es precisamente no tratar de trapear o camuflear algo como el estilo del ejemplo expuesto.. porque si vamos todos programando así, entonces se pierde la realidad de lo que debe cumplirse en la POO.

No confundir $this con que esta llamando funciones y decir es lo mismo como que yo haga clase::funcion(parametro) porque this tiene otro proposito. Dentro de una clase bien estructurada los metodos y los atributos tienen una relacion ya que estan encapsulados dentro de la misma clase.. pero mirando el ejemplo posteado lo que se esta haciendo es una programacion estructurada con intento de camuflaje en un lenguaje orientado a objetos y eso la verdad... teoricamente esta mal, no se aplica y no existe. Es como querer mezclar sintaxis de C y C++ a la vez... eso no te hace mega groso ni mas poderoso, eso esta mal, y hay que respetar las cosas como estan establecidas solo eso.

a eso me refiero, si decides hacer un sistema totalmente orientado a objetos, debes regirte por clases y no mezclar programación estructurada con POO, y suponiendo que tienes una clase color, y quieres un color, no necesitas crear un objeto color para acceder a este, por eso mencioné que en java se llaman a elementos estaticos en clases, lo que viene a ser lo mismo en php si quiero acceder a un elemento, obviamente si quiero un método obligatoriamente debería crear el objeto primero porque si no no tiene razón de ser una clase (aunque esto también pasa en java xD)

por último, al creador del post, le recomiendo aprender a programar en cualquier lenguaje, y si decide seguir con php, leer este blog (http://www.phpfever.com/) XD


salu2