zoukankan      html  css  js  c++  java
  • php深拷贝和浅拷贝

    题如下:

    先分析代码:

    1)isset行代表判断一个通过get方法传递的pass变量是否被定义,因此需要传递一个get类型的pass参量,即在链接后面?pass=才可以进入if

    2)$pass代表获得GET方法传递的参数,也即浏览器“pass=”后面的参数

    3)get_magic_quotes_gpc是获取php处理magic_quotes_gpc的状态,php为了安全,引入这个状态函数,用来判断页面上的sql查询语句中存在单引号的情况,如果打开了则单引号前面加/以防sql注入

    4)stripslashes方法是恢复单引号,将前面的/删除的操作,简言之当magic_quotes_gpc = On时,系统会自动处理单引号等问题,用不用addslashes()和stripslashes()都没关系,但是如果添加数据时用了addslashes(),那么显示数据时必须要stripslashes()

    5)后面是关键,把$pass给反序列化,并判断反序列化的结果,如果反序列化失败则不会进入if,因此需要对pass里的内容进行序列化

    6)在if里面,最关键的是$v->secret === $v->enter这一恒等式,这说明这两个变量必须始终相等,进一步意味着它们应该指向同一位置,进动才能一致,因而这里有一个$v->secret到$v->enter浅拷贝的问题

    因此整理思路:a、需要在链接后面以?pass=的方式去输入 b、输入的应该是调用serialize序列化后的结果 c、序列化之前,需要对$v->secret到$v->enter有一个浅拷贝 d、由于$v->secret和$v->enter,而secret和enter又是just4fun的成员变量,也是$v的成员变量($v->标识),因此$v序列化前应该是just4fun的一个实例,其中实现了secret到enter的浅拷贝,然后序列化后作为pass的参数输入

    直接上代码:

    <?php
    class
    just4fun { var $enter; var $secret; } $test = new just4fun(); $test->enter = &$test->secret; $serTest = serialize($test); print_r($serTest);
    ?>

    输出结果:

    在页面上的验证结果:

  • 相关阅读:
    ubuntu18.04英文环境解决各种软件中文乱码问题
    Centos6两个镜像文件的合并方法
    将centos的yum源修改为阿里云的yum源
    Linux TOP 命令总结
    Nginx add SSL 证书 基础配置
    Nginx Http 核心模块中Server Location 配置
    df -h执行卡住不动问题解决
    Jetty Session Persistence By Redis
    Spring @Transactional配置知识梳理
    通用FTP Client模块设计与实现
  • 原文地址:https://www.cnblogs.com/stzhang/p/15058512.html
Copyright © 2011-2022 走看看