PHP调用end函数报传引用错误及分页锚点加active类问题
问题1:end() 函数抛出Notice报错的修复方案
报错原因:PHP的end()函数要求传入的参数是可被引用的变量,你直接将explode()执行后返回的临时结果传入,没有赋值给变量存储,就会触发Only variables should be passed by reference的Notice提示。
两种修复方案可选:
- 方案1:先存储explode结果再调用end
// Program to display URL of current page. if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') $link = "https"; else $link = "http"; $link .= "://"; $link .= $_SERVER['HTTP_HOST']; $link .= $_SERVER['REQUEST_URI']; // 新增变量存储explode结果 $url_parts = explode("?", $link); $getpage = end($url_parts); $pagename = '?'. $getpage; echo $pagename;
- 方案2:直接调用系统变量获取查询串,更简洁高效
不需要手动拼接拆分URL,直接用$_SERVER['QUERY_STRING']就能拿到?后面的所有参数:
$getpage = $_SERVER['QUERY_STRING'] ?? ''; $pagename = '?' . $getpage; echo $pagename;
问题2:分页a标签active类不生效的修复方案
原有代码存在两个核心错误:
- 已经处于PHP执行上下文的
echo语句中,不能再嵌套<?php ?>标记,嵌套的代码不会被解析,会直接作为字符串输出到HTML中 - 相等判断用了赋值运算符
=,而非比较运算符==,逻辑完全错误
正确实现方式:
首先先获取当前页码的数值,避免字符串比较的异常:
// 先获取当前页码,默认是第1页 $current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
然后输出分页标签时提前判断是否匹配,拼接类名:
// 循环输出页码的逻辑中,$x是当前遍历到的页码 $class = $current_page == $x ? 'active' : ''; echo "<a class=\"{$class}\" href='?page={$x}'> {$x} </a>";
内容的提问来源于stack exchange,提问作者user17524645
相关产品推荐
相关产品推荐

