我在cas.module的第245行drupal CAS模块中看到了一些我并不完全理解的东西:

$initialized = &drupal_static(__FUNCTION__, FALSE);

具有参考符号的函数在它之前发生了什么? 我认为它只适用于变量。 有人可以给我一个简单的解释吗? 这样调用函数时会发生什么,$initialized的值是多少?

请看这里stackoverflow.com/questions/4355300/和这里的php.net/manual/en/language.references.return.php

Drupal使用该函数在单页加载期间缓存数据。它实际上可以像下面这样使用:

static $initialized = false;

只有通过使用中央存储并按功能名称保存变量记录,其他功能才能在页面请求期间访问(对于Drupal更重要,重置)该值。

Drupal如何使用它:

Jeff Eaton在Drupal 7中创建了一篇关于drupal_static和其他缓存技术的博文。

假设另一个模块想要调用您的函数,因为您已将$initialized设置为true,您知道可以从缓存中获取数据。但是,如果其他模块不希望您缓存它呢?然后它可以重置您的静态变量,如下所示:

$initialized = &drupal_static('your_module_your_function');

$initialized = false;

$freshData = your_module_your_function();

它可能不是最干净的模式,但这就是Drupal在很多地方的表现。

从PHP的角度来看它的作用:

使用此构造允许被调用函数按引用而不是按值返回其值。为了做到这一点,被调用的函数也必须用&符号定义,例如:

public function &getBar() {

return $this->bar;

}

您甚至可以将它与参数by-reference结合起来。这样,您可以通过函数一直传递引用,这样当您更改返回值时,您也可以更改原始值。例如:

function &getRef(&$x) {

return $x;

}

$a = 1;

$b = &getRef($a);

$b++;

echo $a; // Will output 2

函数返回作为参考返回。从手册:

Returning by reference is useful when you want to use a function to

find to which variable a reference should be bound. Do not use

return-by-reference to increase performance. The engine will

automatically optimize this on its own.

php函数传引用,关于php:函数调用通过引用传递?相关推荐

  1. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

  2. 2021-01-14python函数传参是传值还是传引用? 参数若是简单类型是传值 若是对象类型则是传引用,python是兼容两者传参方式的

    python函数传参是传值还是传引用? 首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题. ...

  3. 【C++】21.函数传参 传指针和传引用的区别

    指针传参 向函数传指针参数时,注意区分指针的指向(地址) 与 指针指向的地址中存放的值的区别: 改变形参指针的指向,实参指针指向不会变,实参指向的地址存放的值也不会变: 改变形参指针指向的地址中存放的 ...

  4. Javascript 之《函数传参到底是值传递还是引用传递》

    前言 这个问题其实困惑了我好久,但是在实际使用中总是得过且过,不想去深究.由于这种态度,在学习 Javascript 过程中,水平一直都是出于半桶水状态,很多概念和原理似懂非懂,模糊不清. 所以,写了 ...

  5. python函数传值还是地址_python中给函数传参是传值还是传引用

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  6. PHP变量、引用、函数传参之彻底掌握,从此节操是路人

    2019独角兽企业重金招聘Python工程师标准>>> 今天绝对是兴奋的一天,不仅仅是周五这个特殊的日子(周六日可以休息啦),也不是弄清了某wordpress插件的功能流程,更不是再 ...

  7. JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别 一.先分析基础数据与复杂数据的区别 : 基本数据类型:Undefined.Null.Boolean.Number.String 引用数据类型:对象 如:var ...

  8. 论JS函数传参时:值传递与引用传递的区别

    JS函数传参时:值传递与引用传递的区别? 值传递:值传递的数据为基本数据类型,基本数据类型在内存中存放的是数值本身:值传递为单向传递,只能由实参传递给形参. 引用传递:引用传递的数据为复杂数据类型,复 ...

  9. 函数传参问题(指针传参,值传参,引用传参):

    目录 形参和实参: 形参和实参关系: 实参为值传值 实参为指针传值 实参本身为普通变量 实参本身为指针 一级指针 二级指针 引用传值 形参和实参: 什么是形参(parameter),什么是实参(arg ...

  10. Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)

    分享知识 传递快乐 1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{函 ...

最新文章

  1. HDU-1069-Monkey and Banana
  2. Windows下安装Objective-C开发环境
  3. mysql accountlevel1_mysql---修改表结构
  4. 分布式与人工智能课程(part15)--深度学习
  5. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
  6. 读取txt文件赋值到DataGridView中
  7. poj 1363 Rails 栈应用基础题
  8. 游戏建模软件的ZBrush和Mudbox哪个好
  9. 节奏大师服务器不稳定,节奏大师无法登陆的原因及解决方法
  10. QQ坦白说闹得我差点分手,破解揪元凶证清白
  11. 三星固态性能测试软件,三星850 EVO 120G固态硬盘评测——性能测试与保养
  12. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
  13. 函数-6已知输入为一个列表,列表中的元素都为整数,我们定义元素筛选函数为foo,功能是检查获取传入列表对象的所有奇数位索引(注意列表的索引是从0开始的)对应的元素,并将其作为新列表返回给调用者。
  14. 茶有真香 | 一款茶好不好喝自己说了才算
  15. html5 gif 只播放一次,使用JS和canvas实现gif动图的停止和播放代码
  16. KITTI 3D目标检测离线评估工具包说明
  17. 算法心得:高效算法的奥秘 作者:[美] Henry S. Warren, Jr.
  18. 【雕爷学编程】Arduino动手做(79)---MQ135空气检测模块
  19. 2.2. Concepts
  20. 查看java安装路径[linux]

热门文章

  1. 大数据平台搭建_一文读懂数据平台、大数据平台、数据中台
  2. c调用其他类的方法_吊打面试官-类加载器
  3. bzoj3533 [Sdoi2014]向量集 可持久化凸包+二分
  4. 二、Arcgis api js -- Graphic
  5. 此项目与Visual Studio的当前版本不兼容的报错
  6. linux 下安装fbprophet
  7. Unity3D命令行Build
  8. 神经网络之文本情感分析(二)
  9. 使用Harbor配置Kubernetes私有镜像仓库
  10. Ubuntu-16.04安装Xdebug-2.2.5及相关介绍