php - 注意:只能通过引用返回变量引用
问题描述
我收到此通知:
注意:只能通过引用返回变量引用
private function &getPageByLabel(&$pages, $label){
foreach($pages as &$page){
if($page['label'] == $label) return $page;
}
return false; //THIS IS THE LINE THAT THE ERROR MESSAGE MENTIONS
}
我正在使用 ZF 1.12 和 PHP 5.5.9
解决方案
您的函数指定它返回对变量的引用(这意味着它不复制值,它完全传递函数内部的版本)。
由于您返回一个常量,因此没有与此关联的变量,因此它不应该工作。虽然 PHP 很友好,但它会将您要写的内容解释为:
private function &getPageByLabel(&$pages, $label){
foreach($pages as &$page){
if($page['label'] == $label) return $page;
}
$return_value = false;
return $return_value;
}
删除&
之前getPageByLabel
将删除错误,因为现在您将返回(复制的)值而不是引用。
尽管请注意,这可能会导致您的代码出现故障,因为您希望引用您的其中一个$pages
,可能会在外部对其进行修改。如果没有引用,您只需在外部修改副本,而$page
in$pages
将保持不变。
更好的方法可能是创建一个“虚拟对象”来返回。
您可以创建一个名为“虚拟页面”$no_page
并返回它而不是false
. 然后在外部,您应该能够通过以下方式确定页面是否存在:
$page = $x->getPageByLabel(...);
if ($page === $x->no_page) {
// no page found!
}
一个更简洁的选择是先检查是否存在,尽管它会稍微慢一些:
private function pageExistsWithlabel(&$pages, $label) {
foreach ($pages as $page) {
if ($page['label'] == $label) return true;
}
return false;
}
private function &getPageByLabel(&$pages, $label){
foreach($pages as &$page){
if($page['label'] == $label) return $page;
}
// throw an error here
}
if (! $x->pageExistsWithlabel(...)) {
// handle the case where the page does not exist to prevent the error
} else {
$page = $x->getPageByLabel(...);
}
推荐阅读
- xml - feed.Entry 未定义(Feed 类型没有字段或方法条目)
- c++ - 为什么我的代码仅通过在 C++ 中注释单个打印 cout 语句来给出不同的输出?
- bash - 带有尾随换行符的 POSIX/Bash pad 变量
- reactjs - 如何在 React JS 应用程序中的 Gatsby Markdown 页面之间传递数据
- gradle - exec 中的 FileNotFoundException
- angular - 日期管道可用于角度 10 的组件类
- python - 是否有区分大小写的方法来按标题过滤数据框中的列?
- python - 径向动画情节
- java - 在我的项目中在哪里添加幻数?
- digital-analog-converter - 键盘到模拟