Php 使用require调用函数,但未定义变量和数组
为什么用require调用时看不到我的变量 function.phpPhp 使用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
<?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。