繁体   English   中英

在此PHP应用程序中实现用户首选项的最佳方法是什么?

[英]What's the best way to implement user's preferences in this PHP app?

我有一个较小的网络应用,可将内容从一种社交资源重新发布到另一种社交资源。 假设用户有5种过滤内容的选项。 它们的首选项以1或0标记的形式存储在我的用户数据库中。

当我每小时执行一次主要的“发布”操作时,分解代码以实现这些首选项的最佳方法是什么? 更清楚地说,我当前的实现是这样的:

mysql_query(SELECT * FROM users);
foreach ($user as $row){
    get_json_data($userID);
    if ($pref1 == 1){
        /code that enacts preference 1, adds results to array $filtereddata
    }
    if ($pre2 == 1 ){
        /code that filters out preference 2, adds results to $filtereddata
    {   
    postfinalarray($filtereddata);
}

显然,这是模拟代码,但这是我一直在使用的一般流程。 有没有更好的方法来实现根据用户的喜好定制功能? 我是否应该设计函数接受这些首选项作为参数? 这会节省处理时间还是更易于维护?

抱歉,这太笼统了,请提出问题,以便我澄清。

当然,有很多可能性可以改进这种代码。 试想一下,如果您要添加其他首选项,则必须重写整个代码。 我总是尝试使用面向对象的方式,因此创建用户类总是有意义的:

<?php

class User
{
    private $_data;

    public function __construct($userdata, $preferences)
    {
        $this->_data = $userdata;
    }

    public function getPreferencesData($preferences)
    {
        $result = array();
        $prefs = $this->_data['preferences'];
        foreach($preferences as $key => $value)
        {
            if($value == "1")
                $result[] = $this->_data[$key];
        }
        return $result;
    }
}

$mypreferences = array("name" => 1, "birthdate" => 0); // show e.g. name and birthdate
$mydata = array("name" => "Gaius Julius Caesar", "birthdate" => "July 13th -100");
$testuser = new User($mydata);
print_r($test->getPreferencesData($mypreferences));

?>

然后,您可以轻松地适应用户选择的偏好,而不必更改代码。

根据您提供的有限信息,您的方法似乎不错。

我可能会做些不同的事情。 我将有一张您的5个首选项的表(或者如果它们不太可能更改,则只需对其进行硬编码)。 我将创建一个链接首选项和用户的交叉引用表。 然后,您可以执行以下操作:

foreach($users as $user)
{
    $filtereddata = array();
    foreach($user->getPreferences() as $pref)
    {
        $filtereddata += $this->getFilteredData($user, $pref);
    }
}

这比您正在使用的开销更大,但是如果/当您添加首选项/功能时,则更容易扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM