Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/03/2013, 16:14
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 8 meses
Puntos: 270
Respuesta: Sobrecarga en PHP POO

Cita:
Iniciado por jcd Ver Mensaje
sé que PHP no soporta la sobrecarga pero puede simularse, entiendo, o eso creo, el concepto de polimorfismo pero la sobrecarga me da problemas.

Quiero generar un método que dependiendo del número de parámetros que le pase me ejecuta uno u otro codigo, y quiero hacer 5 casos, si acepta dos parámetros, me da la suma, si acepta tres el producto, si acepta cuatro la suma 2 a 2 y la división...etc.
Eso no es polimorfismo, y, por lo tanto, tampoco sobrecarga.Son distintos métodos que lo único que tienen que ver los unos con los otros, es que quieres que se llamen igual.
Sobrecarga es cuando quieres realizar la *misma* acción sobre diferentes tipos de datos, especialmente, cuando dichos tipos tienen una clase base común.Pero lo importante es que la acción sea semánticamente la misma.La suma, la división, la multiplicación, no son lo mismo.


Cita:
Iniciado por jcd Ver Mensaje
1) según mi codigo, en realidad estoy haciendo 5 métodos distintos con 5 nombres distinos, cuando lo que quiero es que se llamen igual.
Según tu código, ya están en un método que se "llaman igual".. _call.

Cita:
Iniciado por jcd Ver Mensaje
2)se supone que cuando isntancie al método, en ese momento es cuando tengo que pasarle los parámetros, y dependiendo de cuántos sean me hará una u otra cosa.
Y ese método..se llama "_call"

Cita:
Iniciado por jcd Ver Mensaje
3) pongo mi codigo, y me salta el siguiente error:
Fatal error: Call to undefined method miclase::metodo() in C:\xampp\htdocs\loader.php on line 47, no sé porque me lo llama comosi fuera estático.
Porque en tu clase no está definido ese método.Te lo "llama como si fuera estático", porque en PHP no existen métodos de instancia, sólo métodos de clase.Así que, por convención, te lo escribe así.


Cita:
Iniciado por jcd Ver Mensaje
Código PHP:
Ver original
  1. <?php
  2. ...
  3. $this-> metodo0;
  4. ...
  5. $this-> metodo1;
  6. ...
  7. $this-> metodo2;
  8. ...
  9. $this-> metodo3;
  10. ...
  11. $this-> metodo4;
  12. ...
  13. $this-> metodo5;
Esas líneas no creo que estén haciendo nada (digo creo, porque es posible que estén creando variables miembro..quién sabe)