$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-&gt;订单中添加1,以便例如$ order_temp-&gt; order = 2结果$ order = 3.
我做错了什么?
答案 0 :(得分: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不是对象。这就是导致问题的原因。另请注意,即使有效,您也可能无法获得预期的结果。
您的$订单将包含OLD值。看我的测试。
更新
$ order_temp的var_dump
显示它是一个数组。你可以用
$order_temp[0]->order++;
$order = $order_temp[0]->order
var_dump($order);
答案 1 :(得分:1)
$order_temp
不是对象,正如错误消息所示。当您尝试访问(或在此情况下,递增)某个不是对象的属性(因此没有属性)时,会出现此错误。
不知道$this->mdl_admin->get_latest_order_id
做了什么,我只能到目前为止,但是,我可以告诉你在if语句中使用显式比较,并且你的类型强制没有达到预期的效果。
使用显式比较:
if (is_object($order_temp) === true)
..这可能不是你的错误的原因,但这是一个很好的做法。
您在赋值中使用((string)
)会将假定的对象变量强制转换为字符串,然后您尝试访问该属性。这不是你要找的机器人。从PHP的角度来看,你想要这样做:
"0"->order++;
......这没有意义。
PHP使用类型juggling [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
...通过将增量运算符放在赋值的FRONT处,返回将是增量操作后增量变量 。如果你把操作符放在最后,那么返回是增量操作之前的变量 。
这意味着你可以这样做:
$order_number_as_string = (string) (++$one_order->order);
通过将增量运算符括在括号中并输入外部类型,再加上增量运算符作为前缀,您将获得预期的结果。
<强>文档强>