Require_once vs Include en PHP
-
Cuándo usar las palabras clave
include
frente arequire
en PHP -
Cuándo usar las palabras clave
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
yrequire_once
arrojarán un error fatal.include
einclude_once
arrojarán un error fatal.require_once
yrequire_once
funcionarán bien, pero todo el contenido se recuperará y se volverá a declarar.include_once
einclude_once
funcionarán bien, pero todo el contenido se recuperará y se volverá a declarar.
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