有没有办法计算对象中的变量数量?
我有一个动态创建的对象,我想将每个属性添加到查询中以将这些属性更新到数据库中。 变量$ oProperties是一个对象:
public function update_model ($id, $oProperties)
{
$SQL = "UPDATE `table` SET ";
$count = 0;
foreach($oProperties as $property=>$value)
{
$count++;
$SQL .= strtolower($property)." = '".$value."'";
if($count !== $oProperties::count()) {$SQL .= ", ";}
}
$SQL .= " WHERE id='".$id."';";
}
我需要知道对象中的属性数量,以便知道何时停止向查询添加逗号。
答案 0 :(得分:1)
您可以使用get_object_vars
:
class foo {
private $a;
public $b = 1;
public $c;
private $d;
static $e;
}
$test = new foo;
var_dump(get_object_vars($test));
结果:
array(2) {
["b"]=>
int(1)
["c"]=>
NULL
}
或者如果您的对象的类型为ArrayObject
,则可以使用count
方法:
$arrayobj = new ArrayObject(array('first','second','third'));
var_dump($arrayobj->count());
但我认为最好使用类似的东西:
public function update_model ($id, $oProperties)
{
$SQL = "UPDATE `table` SET ";
$properties = [];
foreach($oProperties as $property=>$value)
{
$properties[] = strtolower($property)." = '".$value."'";
}
$SQL .= implode(', ', $properties);
$SQL .= " WHERE id='{$id}';";
return $SQL;
}
答案 1 :(得分:1)
$arrayObj = (array)($oProperties);
print_r(count($arrayObj));