我想将一个Object强制转换为一个数组,所以我可以对其进行循环。
我知道:
if request.method == 'POST':
qform = QuestionForm(request.POST)
rform = ResponseForm(request.POST)
if qform.is_valid() and rform.is_valid():
qf = qform.save()
rf = rform.save()
return render(request, 'app/adddatatest.html', {
"qform": QuestionForm(),
"rform": ResponseForm(),
})
存在。但是我想要类似自定义
$array = (array) $object
数组方法。
到目前为止,我知道
__toString()
不存在。
问题:
我可以自定义这种魔术方法吗?
(我也知道,我可以通过调用返回数组的函数来解决此问题)
我想将对象转换为自定义数组:
__toArray()
不通过调用函数进行转换
foreach($object as $key=>$value) {}
即使这是最简单的方法……
答案 0 :(得分:0)
这很容易。只需使用get_object_vars()
https://secure.php.net/manual/en/function.get-object-vars.php
<?php
class Person
{
private $name = 'delboy1978uk';
private $age = 40;
public function toArray()
{
return get_object_vars($this);
}
}
$person = new Person();
var_dump($person->toArray());
哪个给你:
array(2) { ["name"]=> string(12) "delboy1978uk" ["age"]=> int(40) }
现在,假设您要在几个班级中使用它。您可以创建一个基类并对其进行扩展,也可以使其成为特征:
<?php
class ArrayableObject
{
public function toArray()
{
return get_object_vars($this);
}
}
class Person extends ArrayableObject
{
private $name = 'delboy1978uk';
private $age = 40;
}
我认为,如果在特征中使用它,则更加灵活,那么您就不必局限于基类:
<?php
trait CastableToArray
{
public function toArray()
{
return get_object_vars($this);
}
}
class Person
{
use CastableToArray;
private $name = 'delboy1978uk';
private $age = 40;
}
答案 1 :(得分:0)
您是否考虑过使用ArrayObject
?
<h:head>
<title> Index </title>
<link rel="stylesheet" href="indexCss.css" type="text/css"/>
</h:head>