将参数传递给 php 包含/需要构造与参数一起包含如果你想要一个回调

2022-08-30 18:55:42

我已经阅读了很多与我即将提出的问题非常相似的帖子,但我只是想确保没有更复杂的方法来做到这一点。任何反馈都非常感谢。

我想创建一种机制来检查登录用户是否有权访问当前正在调用的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''
    

    检查内容.php:

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

    检查内容.php:

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

    current_executing_script.php内容:

    require 'checkRole.php';
    checkRole('r') or die('no access for you');

我想知道是否有一种方法可以基本上只是传递一个参数来检查Role.php作为包含或需要构造的一部分?

提前致谢。


答案 1

没有办法传递要包含或要求的参数。

但是,包含的代码会在包含程序流的位置加入程序流,因此它将继承作用域中的任何变量。因此,例如,如果您在包含之前立即设置$myflag=true,则包含的代码将能够检查$myflag设置为什么。

也就是说,我不建议使用这种技术。对于包含文件来说,包含函数(或类)比直接运行的代码要好得多。如果您包含包含函数的文件,则可以在程序中的任何时候使用所需的任何参数调用函数。它更灵活,通常是一种更好的编程技术。

希望有所帮助。


答案 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'];

推荐