php 判断空对象

由 Jefsky 发布于 2024-01-04

场景描述:

今天有个需求,前端需要post一个二维数据到后端:

var $pageContent = $('#admui-pageContent');
        $('#btn-y').click(function () {
            $('.city-selecter').html('');
            var pc_cat = $('.pc-cat').html();
            var app_cat = $('.app-cat').html();
            var title = $('input[name="title"]').val();
            var sites = [],html='';
            $('input[name="city[]"]:checked').each(function(){
                sites.push($(this).val());
                html += '<div class="form-group row city-config" data-city="'+$(this).val()+'">';
                html += '<label class="col-sm-2 control-label">'+$(this).val()+'</label>';
                html += '<div class="col-sm-4">';
                html += '<input type="text" class="form-control " placeholder="请输入标题" name="title" value="'+title+'">';
                html += '</div>';
                html += '<div class="col-sm-2">';
                html += pc_cat;
                html += '</div>';
                html += '<div class="col-sm-2">';
                html += app_cat;
                html += '</div>';
                html += '<div class="col-sm-2">';
                html += '<a class="btn btn-default del" data-cid="'+$(this).val()+'">删除</a>';
                html += '</div>';
                html += '</div>';
                // html += '<input type="hidden" name="share['+$(this).val()+']" value="'+$(this).val()+'">';
            });
            console.log(sites);
            $('.city-selecter').append(html);
        });

        $pageContent.on('submit', '.page-content form', function (e) { 
            var data = {};
            var i = 0;
            $('.city-config').each(function(){
                data[i] = {};
                data[i]['city'] = $(this).attr('data-city');
                data[i]['title'] = $(this).find('input[name="title"]').val();
                data[i]['app_catid'] = $(this).find('select[name="app_catid"]').val();
                data[i]['pc_catid'] = $(this).find('select[name="pc_catid"]').val();
                i ++;
            })
            data = JSON.stringify(data);
            $('input[name="site_config"]').val(data);
            $.pjax.submit(e,'#admui-pageContent', { replace: true });
        });

我把二维数组转为对象序列化再传了.到了服务端,需要判断一下那个值是不是空吧,因为穿空的就无效了.所以得判断一下.
开始我是这样想的

 if (request()->isPost()) {
        $data = input('post.');
        $site_config = json_decode($data['site_config']);
        if(empty($site_config)) $this->error('参数错误');
        ....

后来发现,文档中empty()返回值描述没有对象相关的返回,好吧~那应该是对对象不起作用了,好像也没有空对象说法吧,自己挖坑不?!用isset更加不可能了

    当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
    以下的东西被认为是空的:
    "" (空字符串)
    0 (作为整数的0)
    0.0 (作为浮点数的0)
    "0" (作为字符串的0)
    NULL
    FALSE
    array() (一个空数组)
    $var; (一个声明了,但是没有值的变量)

灵机一动,想到了这个get_object_vars — 获取给定对象的属性

  if (request()->isPost()) {
        $data = input('post.');
        $site_config = json_decode($data['site_config']);
        if(empty(get_object_vars($site_config))) $this->error('参数错误');

用get_object_vars来获取对象属性,在判断就好了~