• PHP赋值函数的利用需求


    拿一段PHP代码来说

    <?php
    class Site {
      /* 成员变量 */
      var $url;
      var $title;
      
      /* 成员函数 */
      function setUrl($par){
         $this->url = $par;
      }
      
      function getUrl(){
         echo $this->url . PHP_EOL;
      }
      
      function setTitle($par){
         $this->title = $par;
      }
      
      function getTitle(){
         echo $this->title . PHP_EOL;
      }
    }
    ?>

    这一段代码是比较基础的面对对象代码,成员变量和成员函数,我们可以看到成员函数中setUrl()和setTitle()分别负责的是给$url和$title进行赋值,这一切都没有什么问题,直到今天看到一段反序列化代码

    <?php
    $x = new aclass('a','b');
    $vx = serialize($x);

    代码实例化了aclass类,直接把字符串 a 和 b 作为参数传入了类中....就突然想,既然可以直接在类实例化的时候赋值,为什么一定要用赋值函数呢?岂不是多此一举了么?一直不解,就接着写代码,没写多久就发现了其实有这种需求

    <?php
    
    //上传文件配置
    $allowtype = array("gif", "png", "jpg");
    $size = 2000000;
    $path = "./uploads/";
    
    //判断文件是否上传到服务器
    if($_FILES['myfile']['error'] > 0) {
        echo '上传错误:';
        switch ($_FILES['myfile']['error']) {
            case 1:
                die('上传文件大小超出了PHP配置文件中约定值: upload_max_filesize');
            case 2:
                die('上传文件大小超出了表单中的约定值:max_file_size');
            case 3:
                die('文件只被部分上载');
            case 4:
                die('没有上传任何文件');
            default:
                die('未知错误');
        }
    } 
    
    //获取文件后缀名
    $hz = array_pop(explode(".", $_FILES['myfile']['name']));
    
    //匹配后缀名
    if(!in_array($hz, $allowtype)) {
        die("这个文件类型{$hz}不允许!");
    }
    
    //文件大小判断
    if($_FILES['myfile']['size'] > $size) {
        die("超过了允许的字节大小:{$size}");
    }
    
    //文件名
    $filename = date("YmdHis").rand(100,999).".".$hz;
    
    //判断是否为上传文件
    if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {
        if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $path.'/'.$filename)) {
            die('问题:不能将文件移动到指定目录。');
        }
    }else{
        die("问题:上传文件{$_FILES['myfile']['name']}不是一个合法文件: ");
    }
    
    //序列化引用类
    $v = new getImgnewcode($path.'/'.$filename,NULL,$_POST['x'],$_POST['y']);
    $sv = serialize($v);
    $svWrite = fopen('./post.txt', 'a+') or die('打开文件失败');
    fwrite ($svWrite, $sv.'
    ');
    fclose ($svWrite);

    这是某个后台的片段代码,功能是管理员上传一张海报,然后设定好二维码的位置,在前台用户通过输入网址生成的二维码图片通过getImgnewcode类进行海报的合成。但是在这种情况下,用户的URL还为未知数,所以我提前传入的值为NULL

    $v = new getImgnewcode($path.'/'.$filename,NULL,$_POST['x'],$_POST['y']);

    等到反序列化以后,我们就不可以修改实例化类的时候直接带入的参数了,必须通过类中定义的赋值函数来完成变量的重新赋值,不过这得把赋值函数写在构造函数中__construct

  • 相关阅读:
    在Delphi中使用indy SMTP发送gmail邮件[转]
    Delphi APP 開發入門(四)簡易手電筒
    Delphi APP 開發入門(六)Object Pascal 語法初探
    Delphi APP 開發入門(五)GPS 定位功能
    Delphi APP 開發入門(十)REST Client 開發
    Delphi APP 開發入門(九)拍照與分享
    各种电平的理解
    串口调试
    DSP中-stack和-heap的作用
    不同深度的图片转换cvConvertScale
  • 原文地址:https://www.cnblogs.com/xsseng/p/9557764.html
Copyright © 2020-2023  润新知