_toString()。我怎样才能为数值做类似的事情,比如__toInt()或__toArray()。这样的方法存在吗?有工作吗?使用类似的东西是不是一个坏主意,即使它有解决方法吗?
答案 0 :(得分:1)
没有__toArray
魔术方法(只是check the ones that exist here),但是,不应该,IMO。
虽然人们已经要求使用一种神奇的toArray
方法,但这种方法似乎不会很快实现。
考虑到对象是什么以及我们如何使用它们,toInt
方法没有多大意义,因为所有对象都可以强制转换为数组,并且可以迭代过来,无论如何,我看到使用__toArray
的意义非常小
要将对象“转换”到数组,您可以使用以下任一方法:
$obj = new stdClass;
$obj->foo = 'bar';
var_dump((array) $obj);
//or
var_dump(json_decode(json_encode($obj), true));
这可以使用两个自定义对象完成,如同stdClass
个实例一样
至于作为数组访问它们,我看不出重点。为什么要写一个慢魔术方法来做类似的事情:
$bar = 'foo';
$obj[$bar];
如果可以的话:
$obj->{$bar}
或者你可以这样做:
foreach($obj as $property => $value){}
或者,如果您需要更具体的内容,只需实现任何Traversable
接口即可
对于极少数情况,您希望对象以特定方式从特定属性生成数组,只需为此编写一个方法并显式调用该方法。
class ComplexObject
{
private $secret = null;
private $childObject = null;
public $foo = null;
//some methods, then:
public function toArray()
{//custom array representation of object
$data = array();
foreach($this->childObject as $property => $val)
{
if (!is_object($this->childObject->{$property}))
{
$data[$property] = $val;
}
}
$data['foo'] = $this->foo;
return $data;
}
//and even:
public function toJson()
{
return json_encode($this->toArray());
}
}
好的,你必须自己明确地调用这些方法,但这并不难,真的......是吗?