php7 声明变量类型,我应该在哪里检查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.

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

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

标签:php,types,nullable

来源: https://codeday.me/bug/20190710/1426323.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值