Bottom line: I always require_once at the top of a file for any files
that I will require. No sense in doing anything else if the required
files aren't there. For conditionally including files include_once()
has always made the most sense to me.
I'm not sure that's the best strategy: since include() will continue
executing your script even if the file does not exist, you shouldn't use
include() if anything which follows will fail in the absence of the
(non-)included code. If the content of the other file is essential to the
correct operation of your script, you should use require(), since that will
terminate with a fatal error if the required file is not present.
Isn't this what I said? :P Oh well, no biggie.
It makes sense to require() files in a conditional branch if *only* the code
in that branch is dependent on the required file. If all (or at least
enough) branches rely on the file, then requiring it at the top of the file
is a sensible move.
Ah, now I'm getting more what you mean. To be clear: I generally try to split up my files into the lowest common denominator and keep functionality seperated. The way that I delegate files I generally put one class / module into one file; this just makes it easier for me to manage code. So if I *need* a certain class / module for another class / module to work, then I just require_once at the top of the file.
Whether you use the basic include()/require() or the _once versions depends
on whether you want the code in the file to be executed each time the
require/include is executed or not. For initialization of constants or
parameter variables, the _once versions make sense; for code which contains
substantive logic or output, it may not, especially if inside a loop.
Excellent point. Most of what I delegate to includes falls into the categories of constant / variable initialization / class definition / function definition. In fact I do it that way to prevent my logic errors from include'ing the wrong way just as you have described.
--
Teach a person to fish...
Ask smart questions: http://www.catb.org/~esr/faqs/smart-questions.html
PHP Manual: http://php.net/manual/
php-general archives: http://marc.theaimsgroup.com/?l=php-general&w=2