Bir yöntem, bir PHP sınıfı birkaç kez koştu Should yerine bir sınıf değişkeni için önbelleğe alınmış?

2 Cevap php

PHP birçok kişi pek çok sınıfa şimdi yapıyorum, oturum değişkenleri SET ve GET bir sınıfı kullanır biliyorum, ben olsa da yanlış yapıyorum olmadığını bilmek gerekir.

Yani, örneğin ben bu kullanmak gerekir bir sınıf var gibi yapalım

$session->get('user_id')

Bu değeri aldığı

$_SESSION['user_id']

Ben 15 yöntemleri var ve her yöntem ben bu değeri birkaç defa erişmek için gerekirse o 20 kere gerekirse Şimdi bu sınıfta, şu anda ben bir sınıfta 20 kere, $ session-> get ('User_id') olmalıdır arıyorum o sınıf için bir yerel değişkene sınıf başına bu 1 saat ayarı olması ve daha sonra erişmek? Ben herhangi bir fark ya da değil yapar emin değilim, benim teorim ben şimdi yapıyorum yolu önlenebilir 20 ekstra fonksiyon çağrıları olduğunu?

Teorim doğruysa, ne bir sınıf içinde bu değerleri depolamak için en iyi yolu olurdu? Bir özel ya da kamu veya korumalı değişken gibi?

Teşekkürler, herhangi confusio için üzgünüm, sınıflar ve nesneler bana öğrenmek için bir süre alıyor.

Ayrıca $ session-> get ('User_id') not sadece 1 ben de aynı şeyi yapmak gerekir birçok FARKLI değişken.





UPDATE

Okuduktan sonra Chacha102's () ... burada bu iyi bir yol gibi görünüyor ya da hala bir çok gelişmiş olabilir, ne denedim bir dizi kullanarak hakkında yazılan?

sınıf dosyası

<?PHP
class User
{
    // Load user details into an Array
    public function load_user()
    {
        $this->user_id = $this->session->get('user_id');
        //if user ID is already set, then Load the cached urser data
        if(isset($this->user_id) && $this->user_id != ''){
            // set user data to an array
            $this->user['user_id'] = $this->user_id;
            $this->user['user_name'] =  $this->session->get('user_name');
            $this->user['pic_small'] =  $this->session->get('pic_small');
            $this->user['sex'] =  $this->session->get('sex');
            $this->user['user_role'] =  $this->session->get('user_role');
            $this->user['location_lat'] =  $this->session->get('location_lat');
            $this->user['location_long'] =  $this->session->get('location_long');
            $this->user['new_user'] =  $this->session->get('new_user');
            return  $this->user;
        }
    }
}
?>

ana sayfa dosyası

<?PHP   
require 'user.class.php';

$user = new User;

// if a user_id is set into a session variable then we return an array of other user related data
$user->account = $user->load_user();

// would show the user's ID from our array
echo $user->account['user_id'];
?>

2 Cevap

Eğer böyle bir şey yapıyorsa:

if($session->get('user_id')==1)
{
    $prefs = get_prefs($session->get('user_id'));
    $info = get_info($session->get('user_id'));
}

sonra ben bir yana yerel değişkeni ile yerini alacak

$id = $session->get('user_id');
if($id == 1)
{
    //.....
}

Bu, bir açıklık için artar. Muhtemelen tekrar tekrar böyle basit bir işlevi çağırmak için büyük bir anlaşma değil, ama yine de yapmazdım.

Ben bir tek yöntemi çağrı fonksiyonları sayısını azaltmaya çalışın. : Eğer gibi bir şey yapıyorsanız

$user_id = $session->get('user_id');
$name = $session->get('name');
// ... etc ...

Sen sadece onun yerine tüm oturum değişkenleri bir dizi kapmak isteyebilirsiniz.

$user = $session->get_array();
echo $user['user_id'];

Bu fonksiyon çağrıları azaltır, ve tek bir hamlede tüm verileri almak.


Netlik sadece bir şey, kullanıcı verilerinin bir dizi kullanarak ($user_name, $user_id, vb) her şey için bir değişken oluşturmak için daha okumak muhtemelen daha kolaydır.

Sürece sadece değişken erişmek için işlevini kullanarak konum olarak, bir dizi yöntem üzerinde dağıtılmış girişler için, ben fonksiyonu ile kalmak söyleyebilirim. Ek maliyet küçük olduğunu ve uzun vadeli sürdürülebilirlik için daha iyi.

Chacha102 anlaşılacağı gibi aynı yöntemle içinde, yerel bir değişken doldurma, tek fonksiyon çağrı yapmak istiyorum.

Işlevi veritabanı çağrıları gibi kaynak-yoğun şeyler yapıyor olsa bile, ben senin sınıf bir üye eklemeden önce işlevini bazı iç önbelleğe vererek tercih ederim.

Bu sınıfın bir mantıksal, meşru üye ama sadece geçici bir değişken değil, çünkü sınıf bir üyesi olarak değişken ekleme gerçekten, OOP şekilde mantıklı değil.