将参数传递给php include / require构造

时间:2010-09-14 16:22:36

标签: php parameters include require

我读过很多与我要问的问题非常类似的帖子,但我只是想确保没有更复杂的方法来做到这一点。非常感谢任何反馈。

我想创建一种机制来检查登录用户是否可以访问当前正在调用的php脚本。如果是这样,脚本将继续;如果没有,脚本就会失败,使用像die('you have no access')这样的东西。

我想出了两种方法来实现这个目标:

(请假设我的会话内容已编码/工作正常 - 即我调用session_start(),正确设置会话变量等)

  1. 首先定义一个全局变量,然后检查所需头文件中的全局变量。例如:

    current_executing_script.php的内容:

    // the role the logged in user must have to continue on   
    $roleNeedToAccessThisFile = 'r';
    require 'checkRole.php''
    

    checkRole.php的内容:

    if ($_SESSION['user_role'] != $roleNeedToAccessThisFile) die('no access for you');
    
  2. 在头文件中定义一个函数,并在包含/要求后立即调用该函数:

    checkRole.php的内容:

    function checkRole($roleTheUserNeedsToAccessTheFile) {
        return ($_SESSION['user_role'] == $roleTheUserNeedsToAccessTheFile);
    }

    current_executing_script.php的内容:

    require 'checkRole.php';
    checkRole('r') or die('no access for you');
  3. 我想知道是否有办法基本上只将参数传递给checkRole.php作为include或require构造的一部分?

    提前致谢。

4 个答案:

答案 0 :(得分:34)

没有办法将参数传递给include或require。

但是,包含的代码在包含它的位置加入程序流,因此它将继承范围内的任何变量。因此,例如,如果您在include之前立即设置$ myflag = true,那么您包含的代码将能够检查$ myflag的设置。

那就是说,我不建议使用那种技术。包含文件包含函数(或类)而不是直接运行的代码要好得多。如果你已经包含了一个包含函数的文件,那么你可以在程序的任何一点用你想要的任何参数调用你的函数。它更灵活,通常是更好的编程技术。

希望有所帮助。

答案 1 :(得分:2)

包含参数

这是我在最近的Wordpress项目中使用的东西

创建一个函数functions.php

function get_template_partial($name, $parameters) {
   // Path to templates
   $_dir = get_template_directory() . '/partials/';
   // Unless you like writing file extensions
   include( $_dir . $name . '.php' );
} 

获取cards-block.php中的参数:

// $parameters is within the function scope
$args = array(
    'post_type' => $parameters['query'],
    'posts_per_page' => 4
);

调用模板index.php

get_template_partial('cards-block', array(
    'query' => 'tf_events'
)); 

如果您想要回电

例如,显示的帖子总数:

functions.php更改为:

function get_template_partial($name, $parameters) {
   // Path to templates
   $_dir = get_template_directory() . '/partials/';
   // Unless you like writing file extensions
   include( $_dir . $name . '.php' );
   return $callback; 
} 

cards-block.php更改为:

// $parameters is within the function scope
$args = array(
    'post_type' => $parameters['query'],
    'posts_per_page' => 4
);
$callback = array(
    'count' => 3 // Example
);

index.php更改为:

$cardsBlock = get_template_partial('cards-block', array(
    'query' => 'tf_events'
)); 

echo 'Count: ' . $cardsBlock['count'];

答案 2 :(得分:0)

过去,很多人不同意这种做法。但我认为这是一个意见问题。

您无法通过require()或include()传递_GET或_POST参数,但您可以先设置_SESSION键/值并将其拉到另一侧。

答案 3 :(得分:0)

您可以让所需的文件返回一个匿名函数,然后在之后立即调用它。

//required.php

$test = function($param)
{
    //do stuff
}

return $test
//main.php
$testing = require 'required.php';
$testing($arg);