【问题标题】:array to object throwing Uncaught Error: Call to undefined method stdClass数组到对象抛出未捕获的错误:调用未定义的方法 stdClass
【发布时间】:2019-02-12 18:55:04
【问题描述】:

我正在尝试从代码中重建一个对象。首先我将对对象的调用分解为数组,然后将数组转换为对象,然后测试调用是否有效。

创建的对象看起来不错,但测试调用失败。

$claim = new_client();
print_r($claim);
$pat = $claim->patientFirstName();
echo $pat;

function new_client()
{
$text = '
$claim->patientFirstName() 
UNWANTED STUFF. 
$claim->patientMiddleName()
UNWANTED STUFF.....
$claim->patientLastName() ';


$client = array();
$i = 1 ;
$array =  (explode("claim->",$text));

foreach ($array as &$variable) {
$variable = substr($variable, 0, strpos($variable, "()"));

$client[$variable] = $i;
$i++;
}
unset ($variable);
$object = new stdClass();
foreach ($client as $key => $value)
{
$object->$key = $value;
}
return $object;
}

这是结果。

stdClass Object ( [] => 1 [patientFirstName] => 2 [patientMiddleName] => 3 
[patientLastName] => 4 ) 
Fatal error: Uncaught Error: Call to undefined method 
stdClass::patientFirstName()...

所以任何关于为什么的想法 $pat = $claim->患者名字(); 失败了吗?

【问题讨论】:

  • 似乎有引号和句号不匹配。单引号内的 PHP 代码不会被评估
  • 您正在为 $claim 变量分配一个函数,并尝试使用该变量调用其他函数(将其视为类对象。)。 new_client() 是函数还是类对象?
  • 结果似乎是一个格式良好的 stdClass 对象,当代码运行时可以在 print_r 中看到,所以虽然这可能是真的,但它是答案吗?
  • new_client() 是一个返回类对象的函数。
  • 它是属性而不是方法。 $pat = $claim->patientFirstName; 会工作

标签: php arrays object


【解决方案1】:

您访问元素的方式是错误的。

$claim->patientFirstName
$claim->patientMiddleName

【讨论】:

  • 谢谢。就它的工作原理而言,你是对的。为了能够以相同的方式访问它,我需要更改什么?目标是重建原始对象,而不是更改代码以访问不同的对象。
  • 换一种方式,为什么我不能访问我使用 $claim->patientFirstName() 创建的对象?以这种方式可访问的对象在 print_r($object) 中会是什么样子,或者它们看起来是否相同?
  • 您正在访问它,因为 partientFirstName 是一个函数
  • 对不起,我不是这样做的吗?除了 key_name 是一个变量,因为它通过它的值循环? $object->$key = $value;
  • 您错误地访问它们检查您在键后放置了 ()
猜你喜欢
  • 2021-06-04
  • 2019-07-19
  • 1970-01-01
  • 2012-04-02
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多