Hola tengo una pregunta
¿para que sirve un metodo static y cuando hay que aplicarlo?
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
?>
gracias
| |||
Uhm la verdad a mi no me quedo muy claro....... Un ejemplo es por decir, tienes una clase, usuario, hereda a una clase ActiveRecord, esta a su vez, usa una clase DB, si quieres afectar la forma, en que DB regrese los resultados, tendrias que hacer un metodo en ActiveRecord, que a su vez afectara a la clase DB, o, en la clase DB tener un metodo estatico que afecte todas las instancias de DB. Haver la figura seria asi: Usuario <= ActiveRecord <= DB Lo que dices es que si cambio la forma en que DB regresa lo resultados a ACTIVERECORD, tengo que hacer un metodo en esta clase(ACTIVERECORD) y aqui viene el problemilla que a su vez afectara a la clase DB, uhm ni idea como implementar un metodo en activerecord y que afecte a su clase padre, teniendo en cuenta que lo que se desea es cambiar la forma en que DB regrese los datos, no se si me puedes citar un ejemplo sobre como seria ese metodo que se tenga que implementar en ACTIVERECORD y que a su vez afecte a DB, te lo agradeceria muchisimo, es que la verdad que esto de la POO es muy pero muy fascinante y siempre hay algo que aprender jejeje... de ante mano gracias GatorV, tus aportaciones me han servido de mucho |
| ||||
Bueno ese fue un ejemplo que me vino a la mente, yo por decir me encontre hace poco con un problema, tengo una clase que se encarga de hacer "modulos", o sea maneja las altas, bajas, modificaciones, y busquedas de una tabla, todo por una misma clase. Esta clase implementa muchisimas otras clases, entre ellas una que es DataTable que se encarga de hacer una tabla de datos a partir de un Query SQL, esta tabla a su vez incorpora una clase Formatter que se encarga de "dibujar" cada celda y cada header de forma dinamica, (por decir si tengo idUsuario => Clave de Usuario). El problema era como podia yo desde mi clase heredada de mi clase modulo decirle a la clase DataTable que usara otro formateador, y mi solucion fue usar metodos estaticos, asi ya podia hablar directamente con DataTable sin tener que estar asiendo "trucos". Te pongo parte del codigo para que veas: Código PHP: |
| |||
Bueno tu ahi tienes un metodo estatico llamado setDefaultFormatter al cual le indicas que formateador usar cierto, bueno ahora me quedo un poco mas claro su uso. Muchas gracias GatorV, se ve que esto es ya un poco mas complejo porque ahi tienes otras cosillas : GeckoModuleManager import( "com.uscconsultores.*" ); return parent::newRecord( $form_fields ); ==> este metodo newrecord, que haces le das los parametros para agregar? Bueno otra vez gracias bye Última edición por soonye; 09/09/2006 a las 10:16 |
| ||||
Hablando del primer codigo que puso gatorV Si solo usas public function metodo.... lo toma como un metodo estatico... por default no es asi? Otra duda... que pasa si a ese mismo codigo ....al metodo setprefix no le pones que sea estatico... que error marca o que?.. no podrias alterar a las demas instancias? Es que aun no lo termino de entender.. un metodo estatico sirve para modificar cualquier instancia? le puedes especificar cual ? o afecta a todas las instancias de la clase? Muchas Gracias de antemano
__________________ -URL= Go PHP5. -Age=22. -Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS. |
| |||
Bueno ojala te sirva............... Cita: No, si no colocas la palabra reservada static tu funcion sera normal, mas no estatica. Cita: Bueno sino le colocas la palabra static tendrias que implementarla asi:Código PHP: Código PHP: Cita: Bueno lo que te puedo decir es que un dato estatico es una variable miembro que no esta asociado a un objeto(instancia) de una clase, sino que se asocia a la clase misma, no hay una copia del dato para cada instancia(objeto), sino un sola copia que es compartida por todos las instancias(objetos) de la claseotro ejemplo: Código PHP: |