簡體   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