How to use include within a function?
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 nes开发者_Python百科t';
}
?>
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:
include 'file1.php';
function include2() {
include 'file2.php';
}
file1.php
will have global scope. file2.php
's scope is local to the function include2
.
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 (!defined(FILE1_PHP)) {
define(FILE1_PHP, true);
// code here
}
If you want to go the way of lazy loading (which by the way can have opcode cache issues) use autoloading instead.
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.
Your base assumption is wrong. This kind of optimization is counter-productive; even if your function is hundreds of lines long there will be no noticeable benefit to hiding it from PHP's parser. The cost for PHP to parse a file is negligible; real noticeable speed gains come from finding better algorithms or from better ways to talk to your database.
That said, you should be including the function definition in the included file. Rather than moving the body of the function into func_1.php
, move the entire function into the file. You can then require_once
the file containing the function inside each file where you need it, and be sure that it is included exactly once regardless of how many times you attempt to include it.
An example:
file1.php
function test() {
}
index.php
require_once('file1.php');
include('table_of_contents.php');
test();
Hi I solved the problem
//connect.php
$connect ="OK";
and
include "connect.php";
show($connect);
function show($connect){
echo $connect;
}
精彩评论