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.
¿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.
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.