передача параметров в php включает / требует конструкцию

Я прочитал довольно много сообщений, которые очень похожи на вопрос, который я собираюсь задать, но я просто хотел быть уверенным, что не было более сложного способа сделать это. Любая обратная связь очень ценится.

Я хочу создать механизм для проверки того, имеет ли пользователь, входивший в систему, доступ к скрипту 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'); 

Мне интересно, есть ли способ просто передать параметр checkRole.php как часть конструкции include или require?

Заранее спасибо.

Related of "передача параметров в php включает / требует конструкцию"

Невозможно передать параметры, которые необходимо включить или потребовать.

Однако включенный код присоединяется к потоку программы в том месте, где вы его включаете, поэтому он наследует любые переменные, которые находятся в области видимости. Так, например, если вы установите $ myflag = true непосредственно перед включением, ваш включенный код сможет проверить, для чего установлен $ myflag.

Тем не менее, я бы не предложил использовать эту технику. Намного лучше, чтобы ваш файл include содержал функции (или класс), а не код, который запускается прямо. Если вы включили файл, содержащий функции, вы можете вызывать свои функции с любыми параметрами, которые вы хотите в любой момент вашей программы. Это намного более гибкий и, как правило, лучший способ программирования.

Надеюсь, это поможет.

Включить с параметрами

Это то, что я использовал в своем недавнем проекте 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'];