我有一个显示用户列表的函数,即 displayUsers()
。
基本上,我没有为每个页面使用 1 个不同的 php 文件,而是使用了 switch 函数来加载内容,例如:这是其中 1 个页面的示例。
switch($_GET['page']) {
case '#userlist' : $page = '
<div class="innerbox">
displayUsers();
</div> '; break;
}
正如您所看到的,它应该显示 div
标记并加载函数,但是并没有加载函数,而是仅显示文本“displayUsers()”。我理解它为什么这样做,但是我不确定如何更改它,以便实际上运行该函数而不是显示它。任何帮助将不胜感激。
问候
最佳答案
displayUsers()
是在引号内。它被解释为字符串。你想要
switch($_GET['page']) {
case '#userlist': $page = '<div class="innerbox">' . displayUsers() . '</div>'; break;
}
假设 displayUsers() 返回代码,这会将 displayUsers() 的返回值连接到字符串内。 我认为你很困惑this feature其中解析双引号字符串内的变量。这不适用于函数。
您还可以使用case '#userlist': $page = sprintf('<div class="innerbox">%s</div>', displayUsers(); break;
在这里阅读有关 sprintf 的信息:http://php.net/manual/en/function.sprintf.php
如果displayUsers()
实际上输出代码本身,然后你可以使用
switch($_GET['page']) {
case '#userlist': echo '<div class="innerbox">'; displayUsers(); echo '</div>'; break;
}
发生的情况是打印开始标记,然后调用函数(打印代码),然后按顺序打印结束标记。
如果您得到function not defined()
那么它就是听起来的样子。当前脚本中尚未定义该函数。
PHP 的工作原理 每次请求页面时(有人访问“foo.php”),您的服务器和 PHP 引擎都会从某个目录获取文件(foo.php),解析它,并(通常)以以下形式将某些内容发送回用户HTML 文档的。每个页面就像一个“脚本”,有点像一个迷你应用程序,编译、执行一次,然后忘记。
假设您的主页上有 displayUsers()
已定义。
//index.php
function displayUsers() {
//some code...
}
echo "Welcome to my website!", "<br />", 'Click <a href="foo.php">Here</a>.';
当有人访问您的主页时,displayUsers()
已定义,耶!然而,它很快就被忘记了 - PHP 引擎在加载并完成后丢弃了脚本,并且当然不知道什么 displayUsers()
当您到达foo.php
时.
那么你能做什么? 如果您仅在一页上使用该函数,请在该页上声明它。请记住,每个文件都被视为一个脚本。 PHP 引擎不会跟踪用户 session 中的功能。
如果您在多个脚本中使用该函数,请将您的函数包含在某个“中心”文件和 include 中无论您需要什么,它都可以使用。我真的建议您更多地阅读 PHP 和 include
;我不会解释 PHP 的基础知识;你还需要做一些功课。
关于单引号内的 PHP 函数显示为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11437975/