【问题标题】:PHP Fatal Error: "Can't use method return value in write context in.... "PHP 致命错误:“不能在...中写入上下文中使用方法返回值”
【发布时间】:2011-10-12 05:21:01
【问题描述】:

尝试使用期望类似的类:

$client->firstname = 'bob';

$client->lastname = 'jones';

所以我想将这些数据传递给数组中的脚本......其中键和值设置在其他地方。我想逐步通过将键和值传递给类的数组。尝试使用这个:

while($Val = current($CreateClientData)){

    $client->key($CreateClientData) = $Val;
    next($CreateClientData);
}

得到这个:

致命错误:无法在写入上下文中使用方法返回值 blahblahpath 在第 40 行。

第 40 行是:$client->key($CreateClientData) = $Val;

我该怎么做?

【问题讨论】:

    标签: php


    【解决方案1】:

    如果 $client 已经是某个类的实例,而 $CreateClientData 是一个数组,那么您可能希望执行以下操作:

    foreach($CreateClientData as $k => $v) {
        $client->{$k} = $v;
    }
    

    这当然假设数组中的每个键都是 $client 实例的有效成员。如果没有,那么您将必须在分配值之前进行一些额外的检查,或者您必须将分配包装在 try / catch 中。

    编辑
    关于为什么您的代码不起作用的答案是因为 PHP 不允许将类属性分配给某些返回值的函数。在您的情况下,key($CreateClientData) 返回一个密钥。所以你可以改变你的代码并添加

    $key = key($CreateClientData);
    $client->$key = $Val;
    

    但是,无论如何,foreach 循环要干净得多。

    【讨论】:

    • 完美。我从未在 foreach 中使用过键。谢谢你原谅我的无知。 :)
    【解决方案2】:

    为什么不使用 foreach 循环?

    foreach($CreateClientData as $key => $val) {
        $client->$key = $val;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 2016-08-12
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2012-11-28
      相关资源
      最近更新 更多