I have a large function that I wish to load only when it is needed. So I assume using include is the way to go. But I need several support functions as well -only used in go_do_it().
If they are in the included file I get a redeclare error. See example A
If I place the support functions in an include_once it works fine, see Example B.
If I use include_once for the func_1 code, the second call fails.
I am confused as to why include_once causes the function to fail on the second call, it seems to not ‘see’ the code the second time but if nested functions are present, it does ‘see’ them.
Example A:
<?php
/* main.php */
go_do_it();
go_do_it();
function go_do_it(){
include 'func_1.php';
}
?>
<?php
/* func_1.php */
echo '<br>Doing it';
nested_func()
function nested_func(){
echo ' in nest';
}
?>
Example B:
<?php
/* main.php */
go_do_it();
go_do_it();
function go_do_it(){
include_once 'func_2.php';
include 'func_1.php';
}
?>
<?php
/* func_1.php */
echo '<br> - doing it';
nested_func();
?>
<?php
/* func_2.php */
function nested_func(){
echo ' in nest';
}
?>
The problem with using
include()within a function is that:file1.phpwill have global scope.file2.php‘s scope is local to the functioninclude2.Now all functions are global in scope but variables are not. I’m not surprised this messes with
include_once. If you really want to go this way—and honestly I wouldn’t—you may need to borrow an old C/C++ preprocessor trick:If you want to go the way of lazy loading (which by the way can have opcode cache issues) use autoloading instead.