我目前正在为一款小型在线游戏制作成就系统。成就实体基本上有4个属性:
- id <
- 减去准予/gh>
- earnedOn
最后一个应该是百分比,意思是介于0到100之间的数字。为了确保数据库中不保存大于100或小于0的数字,我的setter方法如下(我使用Symfony2/Doctrine ORM):
public function setProgress($progress)
{
$this->progress = max(min($progress, 100), 0);
return $this;
}
这里重要的一行是max(min($progress, 100), 0)
。
它工作得很好,我只是想问,如果有另一个内置函数在PHP做的事情,如果我所做的是好的(关于良好的开发风格)
从PHP 5.2开始,filter_var()
函数具有相当多的可用选项集。
其中一个让你检查数字是否在一个范围内:
$param = 10;
$result = filter_var( $param, FILTER_VALIDATE_INT, [
'options' => [
'min_range' => 20,
'max_range' => 40
]
]);
var_dump( $result ); // will return FALSE for 10
http://codepad.viper - 7. - com/kvwx7l
您应该考虑从Symfony2的验证组件中为实体添加一些约束。
use Symfony'Component'Validator'Constraints as Assert;
class Achievement
{
/**
* @Assert'Range(min=0, max=100)
*/
protected progress;
}
验证器服务在例如验证表单时自动调用,但你甚至可以通过获取验证器服务来手动调用它,例如在你的控制器中。
$achievement = new Achievement();
$errors = $this->get('validator')->validate($achievement);
您可以使用Range
约束:
use Symfony'Component'Validator'Constraints'Range;
class Achievement
{
/**
* @Range(min=0, max=100)
*/
private $progress;
}
Symfony中的验证是由一个单独的层处理的,所以你应该而不是在setter中执行。
简短的回答是没有, PHP中没有内置函数在下限和上限处"截断"数字。它真的可以写min(max(x, max_value), min_value)
-它很短,可读。
相关文章:
- 如何仅使用PHP检查某个坐标是否落入另一个坐标半径
- 检查单词是否存在一个mysql行(php)
- 是否应该将一个用户类扩展为多个用户子类
- PHP提交的表单具有可变数量的字段和可变名称,请检查是否至少有一个集合
- 是否可以使用雄辩为一个模型获取不同模型类型的集合
- 是否可以通过一个表单进行php和.htaccess身份验证
- 选择带有评论和回复的故事,并在一个查询中检查当前用户是否喜欢
- 如何判断新的一个月是否已经开始?php/mysql
- 编辑一个改变字符串最后一次出现的url,并检查它是否存在于PHP中
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- PHP设置为在一个步骤中检查是否同时定义了数组和键
- 检查多个变量是否不等于一个值php的更简单方法
- 是否可以将php脚本将产生的响应保存到一个变量中
- 是否可以将一个sql事务跨多个函数合并为一个函数
- PHP-确定是否还选择了一个选项
- 如何检查字符串是否可以安全地转换到另一个字符集中而不会丢失
- 使用一个会话是否足够安全
- PHPUnit如何测试一个方法是否具有正确数量的参数
- 如何形成一个参数字符串与多个值,并检查是否一个?或者,值所需要的
- 如何检查权限是否一个朋友允许我张贴在他的墙上或不使用php sdk