zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/xsseng/p/9557764.html
Copyright © 2011-2022 走看看