PHP programmers regularly use the functions (or more appropriately language constructs) like
require_once to insert useful codes in the flow of execution. Although these constructs are used quite interchangeably, there are actually significant differences among them. Although these differences are very well defined in PHP manual, I've noticed many programmers don't really consider these differences while coding. I hope this post will help them towards a better coding practice.
The difference include vs include_once and require vs require_once is obvious.
require allow you to insert a file multiple times within a single execution lifetime. On the other hand,
require_once make sure one file is inserted only once in a single execution lifetime, even if your CODE calls them multiple times.
Ironically, a little less obvious (and possibly more significant) difference is: include vs require or include_once vs require_once. Even though PHP's naming of these constructs are almost perfect according to their functionality, many PHP programmers, specially the beginners fail to realize the significant difference.
As the name suggests, with
include, you simply include other files in the flow of execution. On the other hand, when you use
require, you not only include the file in the flow of execution, but also you tell PHP that the execution cannot be proceeded without this file. In more technical terms:
If PHP interpreter fails to include a file in response to a call of
include_once, a Warning in generated and execution continues without that file. Where as, failure to include a file called by
require_oncegenerates a Fatal Error and execution stops there.
Sometimes people compare
include or die(). However, that is not entirely correct as well. Because
include 'file' or die() will not generate
Fetal Error, but
require 'file' will, if the
file is missing or unreadable.
So in a normal scenario, where you want the execution to go on and show users the output, even if the file is accidentally missing or unreadable, use
On the other hand always use
require_once to include key files to the flow of execution. This will help avoid compromising your application's security and integrity, just in-case one key file is accidentally missing. Then use error_reporting(0) to suppress all the errors and use proper Error Handler to show appropriate information.
For more information checkout PHP manual.