28. Autoload en PHP

A medida que nuestro programa va creciendo, es muy probable que queramos organizar nuestros documentos en varias carpetas y subcarpetas, por ejm, vamos a crear la carpeta Models que tendrá el archivo Course.php que contendrá la clase Course. Por otro lado vamos a crear la carpeta Controllers que tiene el archivo CourseController.php que contendrá la clase CourseController. Por último creamos un archivo index.php que llamará a las clases citadas.

Veamos la sintaxis del archivo Models/Course.php

Course.php

<?php

  namespace Models;

  class Course {
    public function saludar(){
      echo "Saludo desde la clase Course";
    }
  }

 

Ahora veamos la sintaxis del archivo Controllers/CourseController.php

CourseController.php

<?php

  namespace Controllers;

  class CourseController {
    public function saludar(){
      echo "Saludo desde la clase CourseController";
    }
  }

 

Y por último vamos a ver la sintaxis del archivo index.php que llamará a los demás archivos.

index.php

<?php

  use Controllers\CourseController;
  use Models\Course;

  spl_autoload_register(function($clase){
    if (file_exists(str_replace('\\' ,'/', $clase) . ".php")) {
      require_once(str_replace('\\' ,'/', $clase) . ".php");
    }
  });

  $course = new Course;
  $course->saludar();

  echo "<br />";
 
  $courseController = new CourseController;
  $courseController->saludar();

 

Para llamar a cualquier clase vamos a hacer uso de la función PHP spl_autoload_register(), la cual tendrá la sintaxis incluida en el ejercicio, y permitirá que llamemos a cualquier clase utilizando dicha sintaxis. Es importante que los namespaces tengan el nombre de la carpeta que contiene el archivo con la clase correspondiente, y que las clases tengan el mismo nombre que los archivos que las contienen para que todo ello funcione.