微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该在哪里检查PHP 7的变量类型?

随着版本7的到来,PHP引入了标量类型,可空的标量类型和返回类型.使用这些是立即有益的(自我记录代码,运行时致命错误,列表继续)但我不确定在我的代码中我应该开始使用它们.我觉得答案应该“尽快”.

PHP 7之前,我的很多代码看起来像示例类.我的控制器将初始化一个类并将POST变量传递给它.然后我会在类中进行变量类型检查,以确保所有变量都是正确的.

class User {
     public function createuser($username, $password, $some_float)
     {
          // Check types, validate vars and create user
     }
}

使用PHP 7,我可以做到这一点

class User {
     public function createuser(string $username, string $password, float $some_float)
     {
          // Validate vars and create user
     }
}

如果我要使用第二个示例,则意味着将许多类型检查代码移出User类,并进入Controller调用它.我真的不喜欢用类型检查来控制我的控制器的想法.

解决方法:

我相信这个问题的任何答案都会在一定程度上得到澄清,如果它真的适合stackoverlow,我们处于一个灰色地带.不过,我会尽量回答客观的问题.

根据我的经验,与任何其他考虑因素(如运行时性能或可维护性)相比,稳健性是更高优先级,这将从更好的开发人员文档中受益.

基于此,保持输入验证(类型检查只是一种输入验证.还有范围检查等)尽可能接近实际使用输入的地方.在您的情况下,这似乎是模型 – 控制器 – 视图应用程序的模型.根据我对您的示例代码的理解,用户类将是一个模型.

理由:代码会随着时间的推移而发展,你或者更糟的风险是,你的同事在一个地方做出改变而忘记第二个地方的增加.换句话说,如果需要进行更改,则如果代码的相关部分彼此接近,则风险会更小.

其他早期检查,例如在HTML5级别,使用javascript或在控制器级别有它们的优点,它们甚至可能是必要的,但它们与输入真正使用的代码“相距甚远”,因此我不会放弃较低级别的检查.理想情况下,实施所有这些检查.如果时间紧迫,首先牺牲HTML5级别检查,然后是任何javascript检查,然后是控制器级别检查.但放弃模型级别检查是不行的.换句话说,开始在模型级别实施检查,然后实现更高级别的检查.

这适合你的最后一句话:

I don’t really like the idea of bloating out my controllers with type
checking.

这也意味着控制器是大多数错误处理的好地方.

附注:数据库中的输入验证也是如此.这是你的“最后防线”.如果有不良数据泄漏,纠正措施将非常昂贵.因此,尽可能多地将输入验证添加数据库结构中.在最坏的情况下,这些限制可以在以后放宽,您的数据库将保持清洁.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐