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

时间:2013-03-31 21:15:02

标签: 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 => $value) {
            if ($value == $trimslug ) {
                $GLOBALS['$page'] = $key;
            }
        }
    $page = $GLOBALS['$page'];
    $next = $page+1;
    $previous = $page-1;
}



?>  

content.php

<?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;
}

?>

3 个答案:

答案 0 :(得分:0)

这是因为变量是在函数paginator();

的范围内定义的

如果您希望它们在content.php的范围内可访问,请将它们声明为:

global $variable = 'value';

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

答案 1 :(得分:0)

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

全球阵列是不好的做法,只是说。

你总是可以把变量变成私有类并根据需要调用它,虽然这对初学者来说非常棘手。

答案 2 :(得分:0)

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

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