Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

254
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!