Require_once vs Include en PHP

Olorunfemi Akinlua 30 enero 2023
  1. Cuándo usar las palabras clave include frente a require en PHP
  2. Cuándo usar las palabras clave require_once vs. include en PHP
Require_once vs Include en PHP

Para los desarrolladores, durante el ciclo de desarrollo, separamos diferentes archivos PHP en nuestro directorio de desarrollo o producción, pero es posible que necesitemos una función o clase en otro archivo PHP. Sería contrario a la intuición y contrario al enfoque DRY repetir esa misma clase o función en otro archivo.

Por lo tanto, PHP tiene cuatro palabras clave para agregar o dar acceso al contenido de otro archivo PHP, include, require, include_once y require_once. En este artículo, consideraremos todas las palabras clave, pero nos centraremos más en require_once e include.

Cuándo usar las palabras clave include frente a require en PHP

Las palabras clave include y require copian todo el contenido, texto o código, o marcado, del archivo PHP especificado en el archivo PHP de destino de la declaración de inclusión. Sin embargo, la palabra clave include se comporta de manera diferente a require en el manejo de fallas.

  • require produce un error fatal (E_COMPILE ERROR) y detiene el script.
  • include produce solo una advertencia (E_WARNING), y el script continúa incluso si la siguiente sección necesita el código del archivo PHP que incluiste.

Ambas palabras clave son de la misma manera si no se produce ningún error.

Intentemos agregar un archivo PHP simple (variables.php) que contenga un par de variables a nuestro archivo PHP actual.

El archivo variables.php:

<?php

$team = 'Golden State Warriors';
$fav_player = 'Steph Curry';

?>

Ahora, usemos la palabra clave include para agregar el contenido de variables.php:

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

La salida del fragmento de código anterior:

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

Como puede ver, la primera línea no muestra el contenido de las variables porque no hemos incluido el archivo variables.php, pero una vez que lo agregamos, tiene el contenido de las variables.

Ahora, usemos la palabra clave require:

<?php

echo "My favourite player is $fav_player and he plays for $team";

include 'variables.php';

echo "My favourite player is $fav_player and he plays for $team";

?>

Producción :

My favourite player is and he plays for

My favourite player is Steph Curry and he plays for Golden State Warriors

Se produjo la misma salida. Ahora, escribamos mal el archivo variables.php en nuestro código y veamos el efecto.

Para la palabra clave include:

My favourite player is and he plays for

Warning: include(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Warning: include(): Failed opening 'variable.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

My favourite player is and he plays for

Para la palabra clave require:

My favourite player is and he plays for

Warning: require(variable.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 5

Fatal error: require(): Failed opening required 'variable.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 5

Ahora puedes ver la diferencia entre ambos. Con la palabra clave include, el código continuaba ejecutándose aunque el archivo incluido no estaba presente y solo daba una advertencia.

Sin embargo, con la palabra clave require, el código produjo un error fatal y se detuvo por completo en ese punto.

Cuándo usar las palabras clave require_once vs. include en PHP

Hay áreas apropiadas para usar include o require. Es más recomendable usar require todo el tiempo; sin embargo, si su aplicación puede prescindir del contenido del archivo PHP que pretendemos agregar al archivo PHP actual, es posible que no haya ningún problema.

Para dar más contexto para comprender las palabras clave include, require y require_once, probemos con un ejemplo. Para este ejemplo, crearemos un archivo functions.php que se incluirá y se requerirá para mostrar la diferencia.

El archivo funciones.php:

<?php

function add_sums($a, $b) {
  return $a + $b;
}

?>

Usemos include:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    include 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

La salida del fragmento de código:

The program is done 5

Usemos require:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
    require 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
    ?>
  </body>
</html>

La salida del fragmento de código:

The program is done 5

Sin embargo, si el archivo functions.php no está disponible y usamos include, el siguiente será el resultado:

Warning: include(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Warning: include(): Failed opening 'functions.php' for inclusion (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

The program is starting

Fatal error: Uncaught Error: Call to undefined function add_sums() in /home/runner/Jinku/index.php:9 Stack trace: #0 {main} thrown in /home/runner/Jinku/index.php on line 9

Aunque functions.php no estaba allí, el código aún se estaba ejecutando hasta que se produjo un error fatal debido a una llamada a una función no definida, que no es un medio efectivo para trabajar dentro de las aplicaciones PHP.

Sin embargo, cuando usamos require, el error se ve así:

Warning: require(functions.php): failed to open stream: No such file or directory in /home/runner/Jinku/index.php on line 7

Fatal error: require(): Failed opening required 'functions.php' (include_path='.:/nix/store/bq7pj5lz7rq92p3d3qyy25lpzic9phy5-php-7.4.21/lib/php') in /home/runner/Jinku/index.php on line 7

Debido a que usamos la palabra clave require, pudimos evitar el error fatal debido a una llamada a una función no definida. Para aplicaciones PHP bastante complejas, require será más apropiado para poder detectar errores rápidamente y evitar consecuencias no deseadas.

Ahora, demos un paso más allá. Usemos la palabra clave require_once:

<html>
  <head>
    <title>PHP Test</title>
  </head>
  <body>
    <?php
        // Previous code START
    require_once 'functions.php';

        echo "The program is starting\n";
    $sum = add_sums(2,3);

    echo "The program is done\n";
    echo $sum;
        // Previous code ENDS

        // Additional code STARTS

    echo "Another program begins";
    require 'functions.php';
    $sum = add_sums(2,3);
    echo $sum;
    echo "Another program ends";
    ?>
  </body>
</html>

La salida del fragmento de código anterior produciría un error fatal:

The program is starting
The program is done
5
Another program begins

Fatal error: Cannot redeclare add_sums() (previously declared in /home/runner/Jinku/functions.php:3) in /home/runner/Jinku/functions.php on line 3

La palabra clave require_once comprobará si el archivo ha sido incluido y, de ser así, no lo incluirá ni lo requerirá de nuevo. Por lo tanto, debido a que usamos la palabra clave require_once anteriormente, evita requerir o incluso incluir el código de functions.php.

Es posible que desee hacer esto para evitar nuevas declaraciones de llamadas a funciones o asignaciones de valores variables, que pueden resultar costosas para su código.

En el ejemplo, si usamos require dos veces, volverá a llamar a la función y producirá el mismo efecto que antes, dando como resultado un valor de 5.

Combinaciones para entender:

  • require y require_once arrojarán un error fatal.
  • include e include_once arrojarán un error fatal.
  • require_once y require_once funcionarán bien, pero todo el contenido se recuperará y se volverá a declarar.
  • include_once e include_once funcionarán bien, pero todo el contenido se recuperará y se volverá a declarar.
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - PHP File