【PHP】函数的引用返回
欢迎大家访问我自己架的博客站点 码厩技术博客!
PHP:函数的引用返回
遇到函数声明时前面加引用符号的情况。
调用函数时加引用符号可以理解,就是声明的接受变量是一个引用嘛。
(实验证明,这是错的,说引用类型只能赋值给变量。What?不知所云,求指教。)
可是函数声明就没有那么好理解了。
php.net 中的例子:
-----------------------------------------------
<?php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue; // prints the new value of $obj->value, i.e. 2.
?>
本例中 getValue 函数所返回的对象的属性将被赋值,而不是拷贝,就和没有用引用语法一样。
-----------------------------------------------
还是没太明白,试验先。
eg 1、普通的函数声明,然后引用接收。
[code]
function foo() {
$var = 0;
return $var;
}
$get = & foo();
var_dump($get);
$get = 5;
$get = & foo();
var_dump($get);
[/code]
结果:
Strict standards: Only variables should be assigned by reference
int 0
Strict standards: Only variables should be assigned by reference
int 0
eg 2、将上面例子中的函数声明成了引用返回。
[code]
function & foo() {
$var = 0;
return $var;
}
$get = foo();
var_dump($get);
$get = 5;
$get = foo();
var_dump($get);
结果:
int 0
int 0
和没有把函数声明成引用一样的效果。
eg 3、将上面例子中的函数声明成了引用返回。
[code]
function & foo() {
static $var = 0;
return $var;
}
$get = & foo();
var_dump($get);
$get = 5;
$get = & foo();
var_dump($get);
[/code]
结果:
int 0
int 5
eg 4、面向对象中引用返回的应用。
[code]
/**
* 试验辅类,用于试验主类属性ref的->操作。
*/
class Ex {
public $some;
function __construct() {
$this->some = 0;
}
public function set($v) {
$this->some = $v;
}
public function get() {
return $this->some;
}
}
/**
* 试验主类
*/
class MyClass {
public $ref;
function __construct() {
$this->ref = & foo();
}
}
function & foo() {
$var = new Ex;
return $var;
}
$class = new MyClass();
$class->ref->set(5);
var_dump($class->ref->get());
[/code]
结果:
int 5
总结:
1、一般来说,函数返回就是返回一个值。
2、引用就是计算出变量的地址。
3、引用返回是把返回变量的引用返回来了。而且,返回引用的格式决定了两边都要用 & 声明。
若只是在函数那边声明引用,那么返回结果将依然是赋值给接收变量。是不是就是返回一个变量拷贝呢?
若只是在接收变量那边声明引用就会报错,因为函数(还是返回的值?)不能用 & 求地址。
转载于:https://www.cnblogs.com/catroll/archive/2011/12/07/return_ref.html
【PHP】函数的引用返回相关推荐
- C++ 函数的引用返回值
C++ 函数的引用返回值 2009-09-17 09:29 引用是给变量取一个别名,所以引用传递会直接进行变量本身的传递.它的最大好处是可以把别处对变量的改变保留下来,第二好处是它提高了性能:如果函数 ...
- php function 返回值_PHP函数引用返回的实例详解
引用返回 手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时.不要用返回引用来增加性能,引擎足够聪明来自己进行优化.仅在有合理的技术原因时才返回引用!要返回引用 当你想将函数 ...
- c++ 函数的值传递,引用传递 和 引用返回的探索
2019独角兽企业重金招聘Python工程师标准>>> 前言 C++的函数参数和返回分为按值传递和按引用传递,应用到类上面,会涉及到类的 赋值操作 复制函数 构造函数 析构函数 虽然 ...
- python 返回函数对象_返回函数
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = ...
- python函数里面引用外部变量_Python基础 变量进阶
目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 ...
- python函数参数学习_python学习笔记-11.函数参数和返回值进阶
1. 函数参数和返回值的作用 函数根据有没有参数以及有没有返回值,可以相互组合,共有4种形式: 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时,是否接收参数,或者是 ...
- 引用参数与引用返回值
原帖地址:http://www.cnblogs.com/bigshow/archive/2008/11/10/1330514.html 经常看到这样的声明:T& func(T& t), ...
- 11_python基础—函数(引用、全局、局部变量)
文章目录 目标 一. 变量的引用 1.1 引用的概念 1.2 `变量引用` 的示例 1.3 函数的参数和返回值的传递 二.局部变量和全局变量 2.1 局部变量 2.1.1 局部变量的作用 2.1.2 ...
- php函数传引用,关于php:函数调用通过引用传递?
我在cas.module的第245行drupal CAS模块中看到了一些我并不完全理解的东西: $initialized = &drupal_static(__FUNCTION__, FALS ...
最新文章
- ES6中Generator理解
- 安装mysql为什么下载了很多_mysql下载与安装过程
- oracle 锁表如何查看_【赵强老师】第一个Oracle的手工备份和恢复
- B站直播中HLS和去中心化P2P的实际应用
- NAS服务器局域网内IPad、手机、电视盒子等联网播放
- LeetCode:Path Sum II
- python怎么启动mne_mne-python学习之一 入门介绍
- JAVA学习篇--Java类加载
- php文件改后缀,php 如何修改文件后缀
- 医院信息化建设,该何去何从?
- 惠普计算机怎样添加程序,小编教你惠普电脑如何进入bios设置
- H5页面跳转传递参数过长
- https网站请求下载http的资源会被拦截
- linux服务器搭建之路7-通过rdesktop远程连接win10
- 《网络营销推广技术、技巧深度解密》文档
- today study
- java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述
- 大型机/IBM大型机 简介
- 学计算机随堂笔记,随堂笔记 计算机网络原理 自考 自学考试 4741.doc
- maven下载jar包慢-解决详细
热门文章
- JZOJ 3852. 【NOIP2014八校联考第2场第2试9.28】单词接龙(words)
- android 代码加view,Android中将View添加至窗口的源码分析
- linux查看网卡传输,Linux下查看网卡实时流量工具
- android 自定义打包,android 自定义打包后的app名称
- 2021.02.02 Visual QA论文阅读
- python绘制表格界面_python 读取 excel 生成 html 页面
- mysql删除以什么开头的数据_Mysql如何删除以“#sql-”开头的临时表
- 深入理解JVM(8)——类加载的时机
- 后端时间转js时间,主要用于取倒计时
- 网页设计界面 电脑版设计