PHP 7严格类型对象到字符串的转换

开发0

我有一个函数,期望将字符串作为输入参数:

<?php
declare(strict_types = 1);

function testXml(string $xml) {
    echo "this is a string: " .$xml;
}

现在,当我向该函数提供一个对象时,我希望引发类型错误。但是事实并非如此,SimpleXmlElement类型的对象被静默转换为字符串:https : //3v4l.org/lQdaZ

这是错误还是功能?

缺氧

magic函数 的文档所述__toString()

__toString()方法允许类决定将其视为字符串时的反应。

因为该类SimpleXmlElement实现了__toString()magic方法,所以每次SimpleXmlElement在需要字符串的地方使用a时都会调用该方法使用返回的值__toString()代替对象。

很难判断这是功能还是错误1该函数testXml()当前需要一个字符串作为参数,而您却不满意它会静默地接受a的事实SimpleXmlElement

如果删除其参数的类型,将__toString()不再发生对的调用,并且$xml函数内参数的值为SimpleXmlElement对象。调用__toString()发生在该echo "this is a string: " .$xml;行中,$xml即使它不是字符串,也可以打印出的值,这非常方便

如果您认为这是一个错误,则echo(希望将字符串作为参数)应该抱怨的类型,$xml而不应该打印它。不是很方便,不是吗?


1这不是错误,这是语言的演变方式。__toString()是在标量类型的类型声明之前引入的,并且为了不破坏现有行为,在可能的情况下调用它,而不是触发有关参数类型错误的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章