关于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";
时间: 2025-01-22 04:07:14

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

前置后置自增自减操作

class Int { friend ostream& operator<<(ostream& os, const Int& i); friend istream& operator>>(istream& is, Int& i); friend bool operator<(const Int& a, const Int& b); private: int value; public: Int():value(0

PHP的自增自减操作

PHP的变量可以存放任意类型的值.对变量执行自增自减操作时,其值的类型范围广,不仅限于数值类型.Perl等弱类型的语言均有此特征.而Java等变量值严格区分类型的语言,此种操作则仅限于数值类型值. 当字符串中有数值的各进制标识符(0x.0b等).科学记数法的标识符(E)时,会有特例,需要加以注意. 递增/递减运算符不影响布尔值.递减NULL值也没有效果,但是递增NULL的结果是1.在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的. $a = TRUE;var_dump(

C# 中重载自增自减操作符的具体运算原理 ----从C++程序员的角度看C#自增操作符重载的实质

看了看C#的运算符重载,发现与C++打不相同.刚刚被C#的自增操作符坑了,现在来分享一下. 先定义一个类 class A { public int i; public A(int I) { i = I; }public static A operator ++(A a) { return new A(100); } } 主函数 class Program { static void Main(string[] args) { A v = new A(10); Console.WriteLine(

MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)

设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计模式,JSP,Servlet,POJO .数据库使用mysql .数据库连接池需要使用C3P0数据库连接池 .页面上的提示需要使用jQuery ----技术难点 .多个请求如何使用一个Servlet .如何模糊查询 .如何在创建和修改的情况下,验证用户信息是否已被使用,并给出提示 ---------

NodeJS中MySql的增删改查操作

纯粹记录一下最基础写法,几乎没有写什么逻辑,写法也并不是很完善(因为我自己也刚刚摸索出来这么写可以...= =!)    望高手指教   也希望能够帮到比我还新的新手.... //1.insert操作 let insertSql = 'insert into User(username,password,name,gender,age) values (?,?,?,?,?)'; let insertParams = [username, password, name, gender, age];

Yii2 中常用的增删改查操作总结

一.新增 1.使用save() $model = new User(); $model->name = 'test'; $model->phone = '13000000000'; $model->email = '[email protected]'; $model->save(); 2.使用createCommand 原生sql $sql = "insert into user (name, phone, email) values ('test', '1300000

[转]C语言中自增自减运算符教学探究-中国论文网

摘要:C语言教学中,自增自减运算符运用得非常广泛,且具有一定的使用技巧和难度.在诸多运算符中,自增自减运算符是学生最难理解和最易出错的运算符.对自增自减运算符的功能和具体应用进行探究,以期为提高C语言教学效果提供帮助.中国论文网 http://www.xzbu.com/8/view-3865031.htm 关键词:C语言:自增自减运算符:教学效果 中图分类号:G434文献标识码:A文章编号:1672-7800(2012)012-0188-02 0引言 C语言编程设计中,若合理使用自增自减运算符,

python自增自减?赋值语句返回值?逗号表达式?

咳咳,直接进入正题吧. 自增自减(++/--),以及赋值语句,还有逗号表达式都是在C/C++中常见的运算符或表达式. 熟悉C/C++的小伙伴们都知道,在C/C++中: 自增自减(前缀/后缀)运算符将实现对变量值的 加1/减1:  类似 x = 0; ++x;的语句会使最终 x 的值为1 赋值语句将所赋的值作为该语句的返回值(值传递):  类似 (x = func()) > 0; 的语句会将函数 func()的返回值赋给 变量x ,并继续执行 x > 0的条件判断语句,这样的语句在C/C++中显

java日期加减操作

1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date());    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天的日期    calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+1);//让日