验证对象并将其指定给一行中的某个对象


Validate object and assign it to something in one line

我正在寻找一种优化的方法来做这样的事情:

  • 检查我是否从函数中收到了什么:
    • 已设置
    • 是一个数组

如果是这样的话,我想直接把它赋给一个变量。

对于这个提议,我会做一些类似的事情:

  • 假设我正在调用一个函数,该函数返回一个数组(或不返回)。

    <?php
     $data_table = isset(Api::get($url)) && is_array(Api::get($url)) ? (array)Api::get($url) : array();
    ?>
    

然而,这样做需要对函数进行三次调用:

  • 第一,检查if语句是否真的返回了什么
  • 第二个检查返回是否为数组
  • 将返回值分配给$data_table变量的事情

我考虑过做以下事情,但我不确定它怎么能这样工作:

 <?php
 $data_table = isset($result = Api::get($url)) && is_array($result) ? (array)$result : array();
 ?>

请告诉我你的想法。

谢谢。

您可以使用empty()。来自手册:

如果变量不存在,则不会生成警告。这意味着empty()本质上相当于!isset($var)||$var==false。

它并不完全检查它是否是一个数组,而是检查(许多类型的)变量是否为空,但它的方法比您正在做的要短。我想如果你想检查一个数组和isset,那就是你必须做的——没有办法绕过它。

<?php
$data_table = !empty($result) ? $result : array();
?>