Bu fonksiyon örnek düzeyinde veya sınıf düzeyinde olmalıdır?

3 Cevap php

Benim CodeIgniter projede ben var

<?php
class User_model extends Model {
    function user_model()
    {
        parent::Model();
    }

    // should we use instance method?
    function get_total_users_count(){
    	$results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");
    	if($results){
    		return $results->num_rows();
    	}
    	return 0;
    }

    // or class method?
    public static function get_total_users_count(){
    	$obj =& get_instance();
    	$results = $obj->db->query("SELECT * FROM bhr_users GROUP BY userid");
    	if($results){
    		return $results->num_rows();
    	}
    	return 0;
    }
}
?>

Birden çok kullanıcı üzerinde çalışır, çünkü bu bir sınıf düzeyi yöntem olmalıdır gibi hissediyorum. Katılıyor musunuz? CodeIgniter bunu yapmak get_instance doğru yoldur?

3 Cevap

Dürüst olmak gerekirse, ben bunun için tek bir doğru yolu yoktur sanmıyorum. Ben örnek yöntemi en yaygın yolu olduğunu söyleyebilirim, ama bu doğru ya da yanlış olduğunu söylemek değil.

CodeIgniter ve diğer bazı çerçeveler arasında büyük bir fark modeller bunları olmak istiyorum ne olabilir ki. CI kılavuzuna göre, "Model veri yapılarını temsil eder." o daha modeller "tipik" veritabanı ile etkileşim olacaktır söylüyor.

Bana herhangi bir veri kümesi ile başa çıkmak için modeller oluşturmak için izin verir, çünkü ben, CodeIgniter modelleri için kullandığı gevşek tanımı gibi. Bir veri kaynağı olarak bir RSS beslemesi kullanmak ister misiniz? Bunun için bir model kullanabilirsiniz. Bir webcoder veri çekmek ister misiniz? Bunun için bir model kullanabilirsiniz. Eğer modelleri kullanmak nasıl tanımlamak için özgürlük var.

Ben en önemli şey tutarlılık olduğunu söyleyebilirim. Bir yöntemini seçin ve proje boyunca tutarlı bir şekilde kullanın. Eğer proje üzerinde diğer geliştiricilerle birlikte çalışıyorsanız, bu örnek yöntemleri kullanmak daha iyi olabilir. Bu şekilde onlar CodeIgniter belgelerine sitenizde çalışma kodu karşılaştırın zaman oluyor ne karışık almazsınız. Yani, tabii ki, çalışmak devs beceri düzeyine bağlıdır.

Sorunuzu doğrudan cevaplamak için - get_instance () işlev çağrısı statik bir işlev içinde yapmaya çalışıyoruz ne yapmak doğru yoldur.

Sen kullanarak olmalıdır

$results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");

Eğer başka bir sınıfın bir örneğini almak sürece, bunu bu şekilde yapmak gerekir.