当我用这个:
require("diggstyle_code.php?page=$page_no");
Run Code Online (Sandbox Code Playgroud)
警告是:无法打开流:第198行的C:\ xampp\htdocs\4ajax\gallery_core.php没有错误
而错误是:
Failed opening required 'diggstyle_code.php?page=1' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\4ajax\gallery_core.php on line 198
Run Code Online (Sandbox Code Playgroud)
$page_no预先收集变量的值.
但是如果省略'?page=$page_no part'require函数的参数,则不会显示错误或警告.
我需要在使用require()函数时传递变量.
Pas*_*TIN 61
require()并include()会打开相应的他们收到的路径/文件名的文件.
这意味着,使用您的代码,您必须diggstyle_code.php?page=1在磁盘上调用一个文件.显然不是这样,所以它失败了.
引用PHP手册的变量范围页面:
变量的范围是定义它的上下文.在大多数情况下,所有PHP变量只有一个范围.此单一范围也涵盖包含和所需文件.
在您的情况下,您不需要传递变量.如果当前脚本中有变量,则它也将存在于函数外部包含的脚本中,这些脚本具有自己的作用域.
在您的主脚本中,您应该:
$page_no = 10;
require 'diggstyle_code.php';
Run Code Online (Sandbox Code Playgroud)
并在diggstyle_code.php:
echo $page_no;
// Or work with $page_no the way you have to
Run Code Online (Sandbox Code Playgroud)
请记住,包含/要求文件与在其所需行上复制粘贴内容完全相同.
这应该工作,但这是一个非常肮脏的黑客:
$_GET['page'] = $page_no;
require('diggstyle_code.php');
Run Code Online (Sandbox Code Playgroud)
您可能希望重构代码以使用函数和/或对象,并从文件中调用它们而不是包含它们(意大利面条代码警报)
虽然这个问题很老了,但我使用的另一个选项在该线程中缺失了。您可以从所需的文件返回一个函数,该函数接受您想要传递的参数:
return function(array $something) {
print_r($something);
}
Run Code Online (Sandbox Code Playgroud)
并在调用时使用参数调用它require:
require('file.php')(['some', 'data']);
// or:
$context = require('file.php');
$context(['some', 'data']);
Run Code Online (Sandbox Code Playgroud)