Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用require调用函数,但未定义变量和数组_Php_Arrays_Variables_Scope_Require - Fatal编程技术网

Php 使用require调用函数,但未定义变量和数组

Php 使用require调用函数,但未定义变量和数组,php,arrays,variables,scope,require,Php,Arrays,Variables,Scope,Require,为什么用require调用时看不到我的变量 function.php <?php function paginator(){ $links = array("index.php", "services.php", "content.php","contact_us.php" ); $trimslug = substr(strrchr($_SERVER['PHP_SELF'], "/"), 1); foreach ($links as $key =&g

为什么用require调用时看不到我的变量

function.php

<?php
function paginator(){

    $links  = array("index.php", "services.php", "content.php","contact_us.php" );
    $trimslug = substr(strrchr($_SERVER['PHP_SELF'], "/"), 1); 

        foreach ($links as $key => $value) {
            if ($value == $trimslug ) {
                $GLOBALS['$page'] = $key;
            }
        }
    $page = $GLOBALS['$page'];
    $next = $page+1;
    $previous = $page-1;
}



?>  
<?php
session_start();
require './functions.php';
paginator();
?>


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Pagination</title>
</head>
<body>

<h2>Now on Page : <?php echo $page?></h2>

<a href="<?php echo $links[$next] ?>" >Next</a>
<br><br><br>

<a href="<?php  echo $links[$previous]?>" >Previous</a>
<br>


</body>
</html>

content.php

<?php
function paginator(){

    $links  = array("index.php", "services.php", "content.php","contact_us.php" );
    $trimslug = substr(strrchr($_SERVER['PHP_SELF'], "/"), 1); 

        foreach ($links as $key => $value) {
            if ($value == $trimslug ) {
                $GLOBALS['$page'] = $key;
            }
        }
    $page = $GLOBALS['$page'];
    $next = $page+1;
    $previous = $page-1;
}



?>  
<?php
session_start();
require './functions.php';
paginator();
?>


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Pagination</title>
</head>
<body>

<h2>Now on Page : <?php echo $page?></h2>

<a href="<?php echo $links[$next] ?>" >Next</a>
<br><br><br>

<a href="<?php  echo $links[$previous]?>" >Previous</a>
<br>


</body>
</html>

标页码
现在翻到第页:




我希望在使用require函数时能够看到我的变量,因为这段代码将出现在每一页上。这可能是一个很难理解的概念,但我真的希望有人能恰当地解释这个概念

这似乎奏效了,谢谢大家

<?php

    $links  = array("index.php", "services.php", "content.php","contact_us.php" );
    $trimslug = substr(strrchr($_SERVER['PHP_SELF'], "/"), 1); 
    $page = null;

    function paginator(){
    global $links,$trimslug,$next,$previous,$page;

        foreach ($links as $key => $value) {
        if ($value == $trimslug ) {
            // $GLOBALS['$page'] = $key;
            $page = $key;
        }
    }
$next = $page+1;
$previous = $page-1;
}

?>

这是因为变量是在函数paginator()的范围内定义的

如果希望它们可以在content.php的范围内访问,可以这样声明:

global $variable = 'value';

或者,只需在function.php中声明它们,而不需要函数&content.php中的后续调用。

php中的变量仅限于函数的范围,除非通过参数或添加到全局数组进行调用

只是说,全局数组是一种糟糕的做法


您总是可以将变量放入一个私有类中,并根据需要调用它,尽管这对初学者来说相当棘手。

paginator中的变量仅在函数范围内,而不是php文件中。如果您想在该函数之外访问它们,只需将这些变量移到函数之外。乙二醇

$page=null;
$links=...
function paginator(){
...
}

为什么有全局变量是不好的?如您所见,我在函数中使用$GLOBALS['$page']来保留$key的值?有更好的办法吗?使用globals阵列时是否存在安全风险?是的。尽管这可以归结为清理用户输入数据,但将内容放在全局中可能会造成安全漏洞,尤其是在打印错误时。作为参数传递[即
函数myFunction($argument)
]更安全一些。至少有人告诉我,如果代码不在函数中,它就可以工作。但为了更简洁一点,我试着让它成为一个函数,现在我有了问题……出于某种原因,我仍然无法理解这个概念。如果我调用require页面(function.php),然后在前几行内调用函数,它应该遍历程序,就像它不是函数调用一样工作。。。不我甚至试着返回$page。。。。那也没用。。。我这里缺少一个关键概念!如何通过使用该功能变得更干净。我看不出有什么意义。斯蒂尔,如果你想用这个函数来实现它,请按照建议使用全局关键字。我也要感谢你作为答案的一部分!但我只能感谢一个人,没关系。无论哪种方式,解决方案实际上都是相同的。使用global关键字指定作用域是全局的&用NULL预定义变量也可以有效地完成同样的事情。事实上,如果使用global,维护起来更容易,因为您不必去预定义将来可能使用的每个新变量。关于您之前评论检查中提到的理解,我尝试。。。在这一点上我很困惑。。。如果我将所有变量命名为函数范围之外的变量,那么函数内部会剩下什么?关键的概念是,一旦函数调用结束,函数内部定义的变量就会丢失。在函数(或全局)之外定义它们可以使它们在function.php、paginator函数以及content.php中可用。“require”命令基本上合并了function.php和content.php。