Nueva pregunta

Pregunta:

 
  0  
 
Fecha: 18-01-2018 22:15:10 (En Español)

Include dentro de método de una classe[Resuelta]

Hola compañeros,

desde ya!, gracias por leerme y contestar.

Tengo un problema, y es que tengo una porción de código que se repite en varios métodos dentro de una classe, pero cada método devuelve un resultado que no puedo usar como común, lo que quiero decir es que necesito tener esos métodos todos, no puedo diseñar un método que me valga para todo.

Lo que quise hacer es coger esa porción de código, sacarla fuera y dentro de cada método hacer un require_once...

Esta porción de código lo que hace es unos cálculos matemáticos, y si lo hago con el require, los cálculos fallan, no dan el mismo resultado, no se si es porque en esa porción decódigo se llama a otras funciones y hay rows, etc...

No os voy a poner todo el código porque son una infinidad de líneas, pero esto es lo que hay, no se si es que los require_once influyen en estas cosas o que, porque si está el código sin el require_one va bien y si es con require_once falla, da resultado pero es fallido, por lo tanto algunas $rows se pierden o no uede contactar con las funciones externas o algo

para que sea un poco más visual sería así:

class NombreClase {

      //Propiedades
      

      //Métodos

       public function metodo1(){

                 //código no comun

                 require_once(''codigo_comun);

                 //codigo no comun

                 return $res;

       }

       public function metodo2(){

                 //código no comun

                 require_once(''codigo_comun);

                 //codigo no comun

                 return $res;

       }

        public function metodo3(){

                 //código no comun

                 require_once(''codigo_comun);

                 //codigo no comun

                 return $res;

       }
}




Etiquetas: PHP - Pregunta Votos: 0 - Respuestas: 13 - Vistas: 12 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  •  
      0  
     
    Fecha: 18-01-2018 22:39:48 Me respondo yo mismo por si le pasa a alguien más...

    He probado con require y con include... sin usar el "once" y si que funciona.

    No se que tipo de restricción tendrá el require_once y el include_once pero si solo uso require o include funciona.

    Si alguien sabe por qué se lo agradecería
      Votos: 0 - Link respuesta
     
  • Fecha: 19-01-2018 00:08:47 require_once lo que indica es que se incluya siempre que no se haya incluido anteriormente en el mismo documento.

    require_once("codigoA");
    require_once("codigoA");//este no se incluye porque ya esta declarado arriba
    


    yo en tu case fuere creado una función para el código común y le pasara los parametros durante la ejecución.
      Votos: 1 - Link respuesta
     
  •  
      0  
     
    Fecha: 19-01-2018 00:55:03 Muchas gracias por la aclaración Carlos, pero al estar dentro de una función... lo reconoce de manera global?   Votos: 0 - Link respuesta
     
  • Fecha: 19-01-2018 02:12:04 eso ocurre porque php valida y verifica los archivos una vez carga el código, por ende al parcear que se solicita un require_once incluso dentro de una función, este omite cualquier otra carga de dicho archivo dentro de un mismo documento.

    este TEMA te explica algunas diferencias al respecto.
      Votos: 1 - Link respuesta
     
  •  
      0  
     
    Fecha: 19-01-2018 02:45:48 Muchas gracias compañero.

    Doy por finalizada la consulta.
      Votos: 0 - Link respuesta
     
  • Fecha: 19-01-2018 05:28:40 Hola Fran,
    No es buena práctica y creas dependencias innecesarias.

    El código que proporcionas es muy escueto pero por lo que entiendo tu mejor solución es utilizar un trait.
      Votos: 1 - Link respuesta
     
  • Fecha: 19-01-2018 06:50:37 Hola Fran.

    Precisamente esa es la diferencia entre require y require_once: te carga el archivo solo la primera vez que lo encuentra, ignorando las siguientes. Por eso solo te funciona en el método que lo carga.

    No es buena práctica hacer eso en una clase. Deberías poner ese código en un método de la clase, pero más bien, si los métodos comparten tanto código común, deberías plantearte un solo método con argumentos.
      Votos: 2 - Link respuesta
     
  • Fecha: 19-01-2018 07:44:25 Fernando lo explica muy bien, la primera llamada a cualquiera de esos métodos va a ejecutar el (require|include)_once. Las llamadas posteriores notaran que el archivo ya fue incluido y simplemente lo obviarán. Por eso es que te funciona el require|include, sin embargo hacer eso te puede originar más problemas a la larga.

    Realmente tienes muchas opciones, como Fernando menciona puedes abstraerlo todo en un método parametrizado, puedes utilizar un trait, puedes hacer composition, etc. cualquiera de esas opciones es correcta.
      Votos: 2 - Link respuesta
     
  • Fecha: 19-01-2018 13:25:44 Efectivamente, se puede crear un método auxiliar, un método con argumentos, propiedades de la clase... Todo menos usar require para eso.   Votos: 2 - Link respuesta
     
  • Fecha: 22-01-2018 00:55:39 Creo que lo mejor seria que hagas uso de spl_autoload_register y que cargarias en la pagina principal o el controlador principal , eso como lo veas y a partir de alli dispondras de lo que necesites en cada parte del programa y del codigo.

    saludos
      Votos: 1 - Link respuesta
     
  •  
      0  
     
    Fecha: 23-01-2018 01:48:00 Gracias a todos compañeros por vuestras respuestas.

    Fernando, muchas gracias por tu aporte, solo una duda, cuando me dices "método con argumentos", te refieres a pasar parámetros al método?

    Ernesto, he estado leyendo en el manual de PHP a cerca de los TRAITS, me parece interesante pero sinceramente con lo que pone no sabría implementarlo en este problema que tengo.

    Luego me comentas :"puedes abstraerlo todo en un método parametrizado", esto tampoco se lo que es, al menos con ese nombre no encuentro nada en PHP.

    Y por último me comentas: "puedes hacer composition", y todo lo que he encontrado está en inglés, así que cuando tenga un hueco lo leeré que mi inglés es un poco flojo y necesito más tiempo.

    Gracias de nuevo.
      Votos: 0 - Link respuesta
     
  • Fecha: 23-01-2018 02:58:02 Hola Fran.

    Efectivamente, se trata de pasar parámetros al método, como a cualquier función, y según estos realizar unas acciones.

    También puede servirse de cualquier propiedad de la clase, que es como debería ser. Si un mismo método se comporta de distinta forma debe ser en base a las propiedades del objeto, mejor que con parámetros que reciba el método.

    No has dicho de qué objeto se trata, pero si por ejemplo el método es calcularArea(), el objeto debería tener las propiedades alto, ancho y tipo (triángulo, rectángulo, etc), y cada método servirse únicamente de sus propiedades. Vamos que lo primero es diseñar bien la clase.

    Lo de hacer composition o traits yo tampoco lo entiendo...
      Votos: 0 - Link respuesta
     
  •  
      0  
     
    Fecha: 23-01-2018 03:36:28 Hola de nuevo Fernando, gracias por contestar.

    Es un objeto de la clase Pedidos y tiene todas sus propiedades bien definidas.

    Lo que pasa es que no se como hacer para pasar resultados de consultas, a parte me parecería más complicado hacerlo. Ya lo he intentado en otras ocasiones y como los resultados hay que recorrerlos al final se pierde el $row en los otros métodos.

    Seguramente no me entenderás porque no estoy poniendo el código aquí pero tampoco puedo hacerlo en este caso.

    Muchas gracias a todos, me ha sido de gran ayuda esta información.
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com