【问题标题】:Object inside an array, passing an object to a PHP method数组中的对象,将对象传递给 PHP 方法
【发布时间】:2016-01-14 15:15:54
【问题描述】:

我有一个 PHP 应用程序,该应用程序具有一个旨在从 API 调用中获取信息的函数。但是,我试图通过传入模仿 API 数据的信息来使用这个函数。

我对数组有点挣扎,这似乎是数组中的一个对象。

我可以访问 api 提供的数组,所以当我使用以下代码时($triggers 是 api 调用返回的数组):

print("<pre>".print_r($triggers,true)."</pre>");

我得到以下输出:

Array
(
    [0] => stdClass Object
        (
            [triggerid] => 18186
            [status] => 0
            [value] => 0
        )

这是函数的开始:

function iterate_triggers($triggers){
    $trigger_id_values = array();
    foreach($triggers as $trigger) {
        //Necessary to show human readable status messages.
        $check_status = array(0=>"Up", 1=>"Down", 2=>"Degraded", 3=>"Maintenance");
        array_push ($trigger_id_values, [$trigger->triggerid, $trigger->value]);

所以如果我想通过[triggerid] => 18186[value] => 1 这个函数我会怎么做呢?

目前我正在尝试:

iterate_triggers(array(0 => array("triggerid" => 18186,"status" => 0,"value" => 1,)));

但这给了我一个 “试图获取非对象的属性” 错误。请善待我,我已尽我所能自行研究和构建此内容,但无济于事。

【问题讨论】:

  • 不确定我的评论是否会有所帮助,但只想指出错误从字面上说明,您正在尝试访问一个实际上是数组的对象,因此Trying to get property of non-object
  • 这很有帮助,但这是我的问题的一部分。我不确定如何将它作为对象传递给函数。

标签: php arrays api stdclass


【解决方案1】:

您当前正在创建并传递一个包含数组的数组,而您的函数需要一个对象数组。

你应该事先创建你的对象,然后构造你的参数数组,并将它传递给你的函数。

$obj = new \stdClass();
$obj->triggerid = 18186;
$obj->status = 0;
$obj->value = 1;
$arr = array($obj);
iterate_triggers($arr);

comment on php.net 以及该对象文档的其余部分可能对您有用。

到目前为止,实例化一个空的通用 php 对象的最简单和正确的方法,您可以根据您选择的任何目的对其进行修改:<?php $genericObject = new stdClass(); ?>

您在自己的代码中看到的错误消息是由函数内部的$trigger->triggerid 引起的,此时$trigger 是一个数组而不是函数所期望的对象。使用$someObject->propertyName 表示法访问对象属性,而使用$someArray['keyName'] 访问数组元素

【讨论】:

    【解决方案2】:

    最简单的方法是将 assoc 数组转换为一个对象

    在你的情况下,这将是

    iterate_triggers(array(0 => (object)array("triggerid" => 18186,"status" => 0,"value" => 1,)));
    

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 2012-01-20
      • 2020-07-12
      • 2015-02-16
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      相关资源
      最近更新 更多