1
$order_temp = $this->mdl_admin->get_latest_order_id($_POST['parent_id']);

if ($order_temp) {
    $order = (string)$order_temp->order++;
    var_dump($order);
    die();
}

上面的代码产生了这个错误:

Message: Attempt to increment/decrement property of non-object 

而vardump是string '' (length=0)

如果我只是做这样的事情来转储变量:

$order_temp = $this->mdl_admin->get_latest_order_id($_POST['parent_id']);
if ($order_temp) {
   var_dump($order_temp);
   die();
}

输出是:

array (size=1)
  0 => 
    object(stdClass)[28]
      public 'id' => string '16' (length=2)
      public 'name' => string 'sssssssssssssss' (length=15)
      public 'slug' => string 'aaaaaaaaa' (length=9)
      public 'title' => string 'aaaaaa' (length=6)
      public 'body' => string '<p>asdas asd asd </p>' (length=21)
      public 'order' => string '1' (length=1)
      public 'parent_id' => string '5' (length=1)

我只想在 $order_temp->order 上加 1,所以如果 $order_temp->order = 2 结果 $order = 3。

我究竟做错了什么?

4

2 回答 2

1
<?php
class Test
{
    public $order = 10;
}

$order_temp = new Test();
$order = (string)$order_temp->order++;
var_dump($order);
//string(2) "10" 

$order = (string)$order_temp->order;
var_dump($order);
//string(2) "11" 
?> 

您的 $order_temp 不是对象。所以这就是造成问题的原因。另请注意,即使有效,您也可能无法获得预期的结果。

您的 $order 将包含 OLD 值。看我的测试。

更新

您的var_dump$order_temp 表明它是一个数组。你可以使用

$order_temp[0]->order++;
$order = $order_temp[0]->order
var_dump($order);
于 2013-03-12T15:10:16.460 回答
1

$order_temp如错误消息所述,它不是对象。当您尝试访问(或者在这种情况下,增加)不是对象(因此没有属性)的东西的属性时,您会收到此错误。

不知道是什么$this->mdl_admin->get_latest_order_id,我只能走这么远,但是,我可以告诉您在 if 语句中使用显式比较,并且您的类型强制没有达到您的预期。

使用显式比较:

if (is_object($order_temp) === true) 

..这可能不是你的错误的原因,但这是一个很好的做法。

(string)您在赋值中使用 ( ) 将假定的对象变量强制转换为字符串,然后您尝试访问该字符串的属性。这不是您要寻找的机器人。从 PHP 的角度来看,您似乎想要这样做:

"0"->order++;

......这没有意义。

PHP 使用类型杂耍[ doc ]。无论您的对象的属性是否order以字符串开始,只要您使用增量运算符++,PHP 就会将类型转换为整数。如果你想要一个字符串,你所要做的就是开始把它当作一个字符串来对待:

$order_temp->order++; // <-- variable is an integer, $order_temp->order === 1
$order_temp->order .= " and bob's your uncle"; // <-- variable is a string, $order_temp->order === "1 and bob's your uncle"

因此,PHP 中很少需要类型强制。

最后,您可以完全按照您尝试的方式执行此操作,但您必须了解增量++运算符的工作方式。

$number = 0;
$output = $number++;
echo "Output: ".$output; // Output: 0

$number = 0;
$output = ++$number;
echo "Output: ".$output; // Output: 1

...通过将增量运算符放在赋值的前面,返回将是增量操作的增量变量。如果你把操作符放在最后,那么返回的是自增操作之前的变量。

这意味着你可以这样做:

$order_number_as_string = (string) (++$one_order->order);

通过将增量运算符括在括号中并在外部进行类型转换,再加上将增量运算符作为前缀,您将获得预期的结果。

文档

于 2013-03-12T15:12:05.853 回答