Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

259
Vistas
¿Una clase de PHP siempre está disponible globalmente, incluso si se define dentro de la función?

Necesito averiguar si siempre se garantiza que una clase php estará disponible globalmente después de que se declaró por primera vez.

Ejemplo:

 // in File A: function check_if_mail() { if ( ! empty( $_GET['mail'] ) ) { class MyMail {} // now I do some require_once() calls to extend the class. } } // This function is not always executed... if ( /* some_conditions */ ) { check_if_mail(); } // In File B: if ( class_exists( 'MyMail' ) ) { // <-- will this work? require_once 'template_mail.php'; } else { require_once 'template_page.php'; }

El "Archivo A" está escrito por mí, mientras que el "Archivo B" está dentro de una biblioteca de terceros. Además, el archivo A es bastante grande y es una clase en sí mismo, por lo que me gustaría mantener la estructura de función/condición si es posible.

➜ Necesito asegurarme de que la condición en el archivo B se active correctamente en PHP 5.6 y 7.0.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¿Hay alguna razón específica por la que lo está poniendo en una función ya que de todos modos está llamando inmediatamente a esa función? ¿Por qué no simplemente usarlo?

 // in File A: if ( ! empty( $_GET['mail'] ) ) { class MyMail {} // now I do some require_once() calls to extend the class. } // In File B: if ( class_exists( 'MyMail' ) ) { // <-- will this work? require_once 'template_mail.php'; } else { require_once 'template_page.php'; }

El código PHP no necesita estar encapsulado en una función.

Editar: según su edición actual, probablemente sería mejor mover la clase a otro archivo, verificar su condición y ejecutar una inclusión:

 // class-my-mail.php class MyMail {} // in File A: function check_if_mail() { if ( ! empty( $_GET['mail'] ) ) { require_once 'class-my-mail.php'; } } // This function is not always executed... if ( /* some_conditions */ ) { check_if_mail() }

Aunque esto parece un poco... complicado. Pero la respuesta corta es 'sí'. Siempre que la clase esté incluida antes de buscarla, está disponible globalmente en 5.6 y 7. Aunque 5.6 ya no es compatible, no sé cuánto me preocuparía por eso.

Además, está duplicando las condiciones en el archivo A. ¿Hay alguna razón por la que necesite condiciones fuera check_if_email ? ¿O incluso fuera de la clase?

Parece que todo esto sería mejor solo en la clase. Incluir la clase, poner la validación en las funciones de la clase y pasarle los parámetros. Eso sería mucho más organizado y fácil de entender y extender más adelante. Porque en este momento corre el riesgo de tener condiciones cambiantes por todas partes, especialmente con el código de terceros involucrado.

over 4 years ago · Santiago Trujillo Denunciar

0

Sí.

Las definiciones de clases (y definiciones de funciones) son globales en PHP. No son variables; definir uno dentro de una función no limita la definición a ese ámbito.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda