【问题标题】:Switch case of object in PHP [closed]在 PHP 中切换对象的大小写 [关闭]
【发布时间】:2020-10-18 21:33:19
【问题描述】:

我对 PHP 没有很好的了解。请你帮我在一组对象中实现一个 switch case 或 if else 语句。

例如,我有一组 JSON 对象,如下所示

 {"car":[{"colour":"black", "brand":"BMW", "owner":"rob"}]}
 {"bike":[{"colour":"red",  "brand":"Bajaj", "owner":"john"}]}
 {"cycle":[{"colour":"blue",  "brand":"Hero", "owner":"mike"}]}

我的要求是需要检查它是汽车、自行车还是自行车。 在下面的示例消息中是随机 JSON 对象

$smsobj = json_decode($message, true);
switch ($smsobj) {
    case $smsobj->bike:
      $this->bike($smsobj);
      break;
    case $smsobj->car:
      $this->car($smsobj);
      break;
    case $smsobj->cycle:
      $this->cycle($smsobj);
      break;
      default: $resolver->acknowledge($message);
  }

当我收到一个汽车对象时,我会收到类似这样的错误Trying to get property 'bike' of non-object

谢谢。

【问题讨论】:

标签: php json if-statement laravel-5 switch-statement


【解决方案1】:

使用json_decode($message); 而不是json_decode($message, true);

当将true 作为第二个参数传递给json_decode 时,返回的对象将被转换为关联数组。

如果你想将它用作关联数组,你可以像这样访问它:$smsobj['bike'];

顺便说一句,代码可能不会像您预期的那样运行。 $smsobj 永远不会等于其属性之一。您可能想检查密钥是否存在。

您甚至可以避免使用switch/caseifs,并执行类似的操作:

$smsobj = json_decode($message);

$key = array_key_first($smsobj); // PHP >= 7.3

$method = method_exists($this, $key) ? $key : 'acknowledge';

$resolver->$method($message);

如果您运行较低版本的 PHP (https://www.php.net/manual/en/function.array-key-first.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2016-03-05
    相关资源
    最近更新 更多