我正在做一个PHP OO项目,并且一直在思考,在哪里进行变量清理。使对象方法四周,准备隆隆声并进行消毒或给编码人员一些自由和空间,以便疏忽所有数据的自我消毒并使函数变得愚蠢的执行者?
哪一个是首选的OO符合方式?
class something
{
public function getCategoryByCID($cid)
{
if (!is_array($cid))
$cid = (array)$cid;
$cid = implode("','", $cid);
$cid = sanitizemeHARD($cid);
$sql = "SELECT * FROM cat WHERE (cat_cid IN ('$cid'))";
return $db->q($sql);
}
}
$c = new something();
$c->getCategoryByCID($_GET['cid']);
OR
$c = new something();
$cid = sanitizemeHARD($_GET['cid']);
$c->getCategoryByCID($cid); //Of course in this case, the func doesn't have sanitization built in
答案 0 :(得分:1)
你需要让编码人员处理清理工作,因为你不知道预期的价值类型,编码员知道。
但是在您的示例中,您尝试清理SQL语句中的字符串连接。你不应该这样做,而是使用准备好的查询。
答案 1 :(得分:1)
您为整个项目设置的政策问题。 我更愿意遵循规则“收到时过滤” - 即在获取外部数据的那一点。
这样可以避免数据可能通过的每个对象/方法中的双重清理,并且还可以更轻松地检查整个代码以进行正确的过滤。
所以,在你的例子中 - 第二种情况。
答案 2 :(得分:1)
我认为第一种情况(消毒内部功能)更好。因为:
if
),所以只有在真正需要时才会清理数据,这样可以节省你的CPU时间:)答案 3 :(得分:1)
我会和里面一起去:
1)您可能需要打开Db连接以进行清理,也许您可以在功能中执行此操作。 (但这取决于你的设计)。
2)该过程自动化。每次清洁时都不需要手动操作。你唯一一次忘记消毒,可能是个大问题。