PHP引用操作以及外部操作函数的局部静态变量的方法

通过引用方式在外部操作函数或成员方法内部的静态变量

下面举个简单的例子,说明三个关于引用方面的问题:

1. 参数引用后函数内进行类型转换同样是地址操作

2. 参数引用后再传递给其他函数时需要再次添加引用符才能保持地址操作

3. 函数返回值引用必须在函数申明时以及调用时都添加引用操作符

该例子使用的是对象方法的操作,同样适用于函数

<?php
class A {
	public function & test1(& $a) {
		static $i = 0;
		var_dump($i);
		$a = (array) $a;
		$a['domain'] = 'http://blog.csdn.net/zhouzme';
		$this->test2($a);
		$i++;
		var_dump($a);
		var_dump($i);
		return $i;
	}

	protected function test2(& $a) {
		$a['name'] = '蜗牛';
	}
}

$obj = new A();
$a = '';
$c = & $obj->test1($a);
$c++;
var_dump($a);
$obj->test1($a);
var_dump($a);

输出的结果

PHP引用操作以及外部操作函数的局部静态变量的方法,布布扣,bubuko.com

时间: 2024-12-28 20:38:20

PHP引用操作以及外部操作函数的局部静态变量的方法的相关文章

一个类成员函数的局部静态变量问题

之前工作中遇到一个问题,就像题目中描述的那样,看起来题目有些拗口复杂,这里解释下,当时遇到的需求需要这样处理:调用某个类对象的某个成员函数时,第一次有具体意义的,其他时候都是保持不变的.无意义的.这个需求可以看做是在调用某成员函数时,第一次进行初始化,其他时候不进行操作,即在首次调用时进行初始化,根据这点,很容易想到c/c++里面的static变量,它的作用是保持变量内容的持久,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化.根据需求,使用static局部变量,写下

局部静态变量

1 #pragma region 成员函数的局部静态变量应用 2 class CTestA 3 { 4 public: 5 CTestA(); 6 void ReturnCurrentTime(float currentFrame, float nextFrame); 7 }; 8 9 CTestA::CTestA(){} 10 11 void CTestA::ReturnCurrentTime(float currentFrame, float nextFrame) 12 { 13 stati

PHP 的 返回引用(方法名前加&) 和 局部静态变量(static)

先阅读手册==========从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 & : 例子 17-13. 由函数返回一个引用 <?php   function &returns_reference()   {       $someref = 0;       return $someref;   }      $newref = &returns_reference();//相当于 $newref = &$someref;   ?>

函数返回局部指针变量是否可行?

我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量.为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段.只读数据段.已初始化的读写数据段.未初始化的数据段.堆.栈. 1.代码段.只读数据段.已初始化的读写数据段.未初始化的数据段都属于静态区域

PHP函数里面的静态变量

工作一年了,一年里很少用到static这个关键词,不管是类里面还是方法里面基本都没怎么用过.平时看到类里面有这个都没什么好奇的,今天在函数里面看到了这个,就去百度了一下. <?phpfunction test1(){    static $a = 0;    $a++;    echo 'test1的'.$a.'<br/>';}function test2(){    $a = 0;    $a++;    echo 'test2的'.$a.'<br/>';}test1();

局部静态变量是如何做到只初始化一次的?

关于编译选项 -Wa,-adlhn参考 http://blog.csdn.net/lanxinju/article/details/5900986 以下内容来自于内网别的高人的回复 可以写个程序测试一下: class A { public: A() {} public: int a; }; int static_var_func() { static A a; return a.a++; } int main(int argc, char * argv[]) { static_var_func(

比较全局变量、全局静态变量、局部变量、局部静态变量的区别

比较全局变量.全局静态变量.局部变量.局部静态变量的区别,他们在编译完后存储位置在什么地方.初始化值在什么地方.内存什么时候分配.赋初值对这些变量有哪些影响等.要弄清楚这些问题,首先要弄清楚下面几个知识点. C语言分下面几个存储区: 1.栈区(stack) 由编译器在需要的时候自动分配释放,在不需要的时候就自动清除的变量存储区.通常存放的变量是函数的参数值.局部变量的值等,其操作方式类似于数据结构中的栈. 2.堆区(heap) 一般由程序员去分配释放,和编译器完全没有关系,直接由我们的应用程序去

局部静态变量的多线程问题

静态局部变量实在第一次访问的时候进行初始化的,先来看下初始化的过程 class base { public: base(){} }; void fn() { static base t; } 首先定义一个类; 初始化过程的汇编 首先取出一个值和1进行比较 ,如果不等把1 复制给这个地址 然后调用base的构造函数进行初始化 根据上下文 可以理解 其实这个地址就是来标记该静态变量是否进行过初始化,如果没有置为1,然户进行初始化.如果为1,则跳过初始化. 下面考虑多线程的环境当线程1 在赋值标志位之

局部静态变量只能初始化一次是怎么实现?

静态变量可以分为全局静态变量,和局部静态变量,先来说说全局的吧.全局静态变量和全局变量的区别并不大,只是全局静态变量只能在当前文件中使用,而在反汇编中二者并无区别,只可以在当前文件中使用,不过是编译器做出的限制.局部静态变量,会有些特殊,它不会随着作用域结束而消失,在未进入作用于之前就已经存在.局部静态变量和全局变量都保存在二进制文件的数据区,而在代码中的限制,不过是编译器限制而已. 那么当某个函数频繁调用局部静态变量时,C++的语法规定局部静态变量只能初始化一次,那么编译器是怎么做到的呢. 来