关于PHP中的自增、自减操作的奥秘

首先看一道面试题:

    $a = 1;
    $b = &$a;

    if ($b == $a++)
        echo "true";
    else
        echo "false";

首先,创建了一个变量$a,并且将数值设定为了1;

然后,创建了一个变量$b,并将其作为对$a的一个引用;

最后这个判断语句中,包含两个opcode:POST_INC 和 IS_EQUAL。首先执行的是先返回后自增语句(POST_INC),首先返回1,然后$a自增为了2,因为$b是$a的一个引用,$b也是2。然后执行的是比较语句(IS_EQUAL),因为$b的值是2,$a++的返回值是1,所以不相等。

相类似的面试题目还有:

    $a = 1;
    $b = &$a;

    $b = $a++;

    echo "a: $a; b: $b";

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索变量
, 面试题
, echo
, 前自增后自增运算
, 自增
, 语句
, 自增操作
一个
自增操作数必须是左值、java 自增 原子操作、php变量自增、php自增函数、php 自增,以便于您获取更多的相关知识。

时间: 2024-09-20 22:42:00

关于PHP中的自增、自减操作的奥秘的相关文章

PHP 中「自增、自减」运算引发的奇怪问题

PHP 中「自增.自减」运算引发的奇怪问题 在 PHP 的官方手册中写道: PHP 支持 C 风格的前/后递增与递减运算符. 第一个注意事:递增/递减运算符不影响布尔值.递减 NULL 值也没有效果,但是递增 NULL 的结果是 1. 换句话说:递增/递减运算中,不会把操作数转换成整数后再运算.如果运算数是布尔值,则直接返回结果. 递增/递减布尔值: $a = TRUE; var_dump(++$a); // bool(true)   $a = TRUE; var_dump(--$a); //

PHP中自增自减运算

PHP中自增自减运算  问题:若$i=2,求表达式($i++)*($i++)*($i++)的值,并求$i的值  答案:($i++)*($i++)*($i++)结果为24,$i为5  分析:先看计算顺序,发现有括号则先算括号里面的,先取$i的值2为($i++)的值,然后$i自加为3:  [此时($i++)左=2,$i=3]             再算括号中,先取此时的$i的值3为($i++)的值,然后$i再自加为4:[此时($i++)中=3,$i=4]             后算括号右,先取此

斐波那契数列-Fibonacci数列 的疑问(一增一减的迭代法)

问题描述 Fibonacci数列 的疑问(一增一减的迭代法) 程序如下: int f = 0; int g = 1; for (int i = 0; i <= 15; i++) { println(f); f = f + g; g = f - g; } 输出:0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 问题1:为什么是用一增一减实现的? 问题2:还有关初值f和g是怎么设定的? 谢谢! 解决方案 public int fibonacci(int n){

c++-运行定时器后内存持续的涨~不算太快但是只增不减

问题描述 运行定时器后内存持续的涨-不算太快但是只增不减 可以认为这个回调函数在不断的被调用-有试着delete pDlg 这个程式就退出来了-求解 解决方案 你定时器中不停的new生成对话框就会有内存泄露 你可以控制对话框显示隐藏来做到 而不是不停的创建

中国人寿去年净利336.26亿增银减股投资回稳

昨天,中国人寿保险股份有限公司(601628.SH,02628.HK,下称"中国人寿")在三家保险股中率先发布了2010年年报,中国人寿2010年实现净利润336.26亿元, 同比增长2.3%.保费收入则保持两位数增长. 净利微增2.3% 年报显示,在新会计准则下,2010年,中国人寿实现利润总额410.08亿元(人民币,下同),同比微减1.8%.营业利润410.11亿元,同比减少2%.归属于公司股东的净利润达336.26亿元,同比增长2.3%:每股收益(基本与稀释)1.19元. 在去

asp.net mvc4 如何向mysql 中实现 增删改查操作

问题描述 asp.net mvc4 如何向mysql 中实现 增删改查操作 如题,最近在写一个基于asp.net mvc4网站,后台要求使用mysql数据库,现在的情况是数据库可以连通,单独的sql也会写,但是我不知道按照规范应该在哪写,以及如何通过方法写对应实体的增删改查这些个基本操作,还望有经验的高手能够指点一二! 解决方案 mysql也有entity provider,如果你用它,那么编程和使用sql server没有什么不同. 解决方案二: http://ju.outofmemory.c

坐标值有增有减-VS2010 使用chart控件作图 横坐标不是递增的 不知为什么 ? 希望大牛赐教

问题描述 VS2010 使用chart控件作图 横坐标不是递增的 不知为什么 ? 希望大牛赐教 利用chart控件作图 纵坐标符合 是递增的 但是横坐标不是递增的 需要说明的是:我横坐标绑定的值不是递增的 有增有减 希望大牛指导一下,通过怎样的设置,使横坐标值不受绑定值的影响,保持递增 解决方案 设置chartarea X轴的 IntreVal Min Max IntervalAutoMode=VariableMode 之前的思路用dataview的sort排序没有必要 只需要 将需要显示的两列

c语言-C语言自增自减问题 求教

问题描述 C语言自增自减问题 求教 #include "stdio.h" union ww { char s[4]; int k; }; struct node { int a,*b; union ww c; }; main() { int a[5],i,n=0x6162; struct node s[5],*p; for(i=0,p=s;i { p->b=a+i; s[i].c.k=n++; } for(i=0;i a[i]=i*10+10; p=s; printf("

数据库表id-数据库中id自增,数据库其他表也出现了类似的问题,问题如下

问题描述 数据库中id自增,数据库其他表也出现了类似的问题,问题如下 数据库中id自增1,后来添加数据后自加了近1000后又持续+1,数据库其他表也出现了类似的问题 ID如:1,2,3,4,5,6,7,8,9,过短时间再添加数据 ID:1200,1201,1202,1203,过短时间再添加数据 ID:2301,2302,2303,2304 这是神马问题,求解! 解决方案 你的自增是用的序列吗?如果其他表或其他地方也调用这个序列,中间空白部分的可能是序列自动增长的时候生成在其他表里面了