Bu PHP uygulaması, kullanıcının tercihlerini uygulamak için en iyi yolu nedir?

2 Cevap php

Ben başka bir sosyal kaynaktan içerik yayımlar küçük bir web uygulaması var. Kullanıcılar, en bu içeriği filtrelemek için nasıl 5 seçenek diyelim var. Bunların prefs 1 ya da 0 marker olarak benim kullanıcı DB saklanır.

Ben saatlik benim büyük "yayımlamak" eylemi ne zaman, ne bu tercihleri ​​uygulamak için benim kodunu kırmak için en iyi yolu nedir? Daha net yapmak için, benim şimdiki uygulama bu gibi bir şeydir:

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);
}

Açıkçası bu sahte kod, ama ben kullanıyorum genel akış var. Kullanıcının tercihleri ​​bir işlevi özelleştirme uygulamak için daha iyi bir yolu var mı? Ben parametre olarak bu tercihleri ​​kabul etmek fonksiyon tasarım mıdır? Bu işlem zaman kazanmak veya daha sürdürülebilir olacak mı?

Bu çok genel olup olmadığını netleştirmek çok üzgünüm, soru sormak lütfen.

2 Cevap

Well of course there are many possibilities to improve this kind of code. Just imagine, if you would add another preference you would have to rewrite your whole code. I always try to use the object oriented way so creating a user class always makes sense:

<?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));

?>

Sonra kolayca kodunu değiştirmek zorunda kalmadan kullanıcının seçtiği tercihlerini whatefer uyarlayabilirsiniz.

Sağladığınız sınırlı bilgi itibaren, yöntem iyi görünüyor.

Herhalde biraz farklı bir şey yapmak istiyorum. Ben senin 5 prefs bir tablo olurdu (ya da değiştirmek için çok olası iseniz sadece zor onlara kod olurdu). Ben Prefs ve kullanıcıları birbirine bağlayan bir çapraz referans tablosu yaratacak. Sonra gibi bir şey yapabilirsiniz:

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

Bu kullandığınız ne daha fazla yük vardır, ancak daha kolay genişletilebilir sen tercihleri ​​/ özellikler eklemek eğer / ne zaman.