【问题标题】:PHP object is not behaving like an objectPHP 对象的行为不像对象
【发布时间】:2018-09-10 02:54:02
【问题描述】:

我正在使用 curl 在 PHP 中发出 JSON 请求。我已将响应存储在一个名为 $registerCompany 的变量中并将其打印在屏幕上以查看返回的内容,通过打印我的变量得到以下响应

{
resultCode: "duplicate",
result: {
isValid: true,
referenceKey: "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
},
success: false
}

我知道这是一个对象,当我尝试获取其属性时,例如 $registerCompany->resultCode 我收到以下错误:

试图获取非对象的属性'resultCode'

这里有什么问题,谁能帮忙

这是我的 PHP 代码

function enquiry_company($data) {
    $curl = curl_init();

    curl_setopt_array($curl, [
          CURLOPT_URL => "hidden",
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 30,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => json_encode($data),
          CURLOPT_HTTPHEADER => [
                "content-type: application/json",
                "x-api-key: hidden"
              ],
          CURLOPT_SSL_VERIFYHOST => 0,
          CURLOPT_SSL_VERIFYPEER => 0,
        ]);

    $response = curl_exec($curl);
    curl_close($curl);
    return $response;

}


$api_data = [
            "identityNumber" => 123456789,
            "commercialRecordNumber" => 123456789,
            "commercialRecordIssueDateHijri" => 01-01-2000,
            "phoneNumber" => 00000000000,
            "extensionNumber" => 0,
            "emailAddress" => mail@mail.com,
            "managerName" => 'Manager',
            "managerPhoneNumber" => 000000000,
            "managerMobileNumber" => 000000000,
        ];

$registerCompany = enquiry_company($api_data);
echo $registerCompany;
$registerCompany = json_decode($registerCompany, true);
$registerCompany = (object) $registerCompany;
echo $registerCompany->resultCode;

谢谢

【问题讨论】:

  • 我看到的主要问题是它不是 JSON(没有引用键)。您能否展示您的实际代码,包括您如何“打印变量”
  • @Phil 我现在已经添加了完整的代码
  • 只需将其更改为 $registerCompany = json_decode($registerCompany); 而不使用 true,因为它明确要求将 JSON 解码为 数组
  • 下次尝试阅读手册,了解每个参数的作用~php.net/manual/function.json-decode.php
  • registerCompany->resultCode; 更改为 registerCompany['resultCode']

标签: php json string object curl


【解决方案1】:

如果你返回一个数组使用$registerCompany = json_decode($registerCompany),这将输出一个对象。

如果你做了$registerCompany = json_decode($registerCompany, true),这会给你一个数组而不是一个对象。

http://php.net/manual/en/function.json-decode.php

【讨论】:

  • 谢谢@Eli,但它像一个数组一样工作,但我希望它像一个对象一样工作.. 不是一个大问题,但我以前工作过,但我失去了以前的所有工作。再次这样做......谢谢你
  • Amjad 你读过@Eli 的答案吗?这就是为什么你得到一个数组而不是一个对象的原因。你有没有点击链接?第一个示例正是您所需要的。
【解决方案2】:

假设你的响应是一个数组

首先将你的数组转换成一个对象

$registerCompany = (object)$registerCompany;

那么你的数组现在是一个对象并且可以访问

echo $registerCompany->resultCode;

【讨论】:

  • @Amjad 你不应该需要"trick" 任何东西。你的代码是什么样的?
【解决方案3】:

首先使用gettype 查看您拥有的变量类型。

http://www.php.net/manual/en/function.gettype.php

从那里,您有三种可能性。一个是它是一个字符串。如果是字符串,则表示它是 JSON 格式。这意味着您需要对格式进行 JSON 解码才能正常工作。请参阅Eli's 答案。

二,它是数组形式。在这种情况下,请使用初学者的答案并将其类型转换为带有 (object) $variableName; 的对象

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2022-01-20
    • 2021-04-14
    • 2019-09-18
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多