如何通过php的require()或include()函数传递变量?

sof*_*ser 34 php

当我用这个:

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)

请记住,包含/要求文件与在其所需行上复制粘贴内容完全相同.

  • 这仅适用于启用 auto_globals 的代码。通过查询字符串传入的变量位于超全局“$_GET”数组中(或“$_REQUEST”数组) (2认同)

kni*_*ttl 8

这应该工作,但这是一个非常肮脏的黑客:

$_GET['page'] = $page_no;
require('diggstyle_code.php');
Run Code Online (Sandbox Code Playgroud)

您可能希望重构代码以使用函数和/或对象,并从文件中调用它们而不是包含它们(意大利面条代码警报)


Mar*_*rty 5

虽然这个问题很老了,但我使用的另一个选项在该线程中缺失了。您可以从所需的文件返回一个函数,该函数接受您想要传递的参数:

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)