CodeIgniter'daki sınıf yöntemleri ve örnek yöntemleri, bunları nasıl kullanabilirim?

5 Cevap php

Ben CodeIgniter için çok yeni ama ben Raylar gelişme bir sürü gibi OOP ve MVC anlıyorum. Ben henüz çözemedim bir şey CodeIgniter'daki bir sınıf düzeyi yöntem yazmak ve denetleyicisi erişmek için nasıl. Örneğin, ben var

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

    public static function get_total_users_count(){
    	$results = $this->db->query("SELECT * FROM bhr_users GROUP BY userid");
    	if($results){
    		return $results->num_rows();
    	}
    	return 0;
    }
}
?>

Ben adında bir önceki programcı gibi bir şey var "Hoşgeldiniz" hangi benim denetleyicisi Şimdi User_model::get_total_users_count() ile aramak mümkün olmalıdır benim modeli için bir sınıf düzeyi yöntem kurulan burada yaptıklarını düşünüyorum:

<?php

class Welcome extends Controller {

    function Welcome()
    {
    	parent::Controller();	
    	$this->load->model('bhr_model');
            $this->load->model('user_model');
    }

    function index()
    {

    	$invite =    $this->uri->segment(3);
    	if($invite == 'invitefriends') {
    		$pagedata['invitefriends'] = $invite;
    	} else {
    		$pagedata['invitefriends'] = '';
    	}

    	$pagedata['numberofpeople'] = User_model::get_total_users_count();
    	$this->load->view('default_page', $pagedata);
    }
}

I get_total_users_count bir sınıf düzeyinde fonksiyonu üzerindeki db yöntemi kullanıyorum çünkü diyor çünkü yukarıdaki yöntem çağrısı get_total_users_count çalışmaz. Diğer bir deyişle bir sınıfa başvururken bu db yöntemi vardır $.

Yani şimdi benim sorum biraz daha teorik. Ben her zaman bir yöntem, bir sınıfın belirli bir örneği üzerinde hareket olduğunda örnek yöntemleri yalnızca kullanılması gerektiğini düşündüm. Doğru, mantıklı? Ancak, get_total_users_count bütün "kullanıcılar" hareket eden ve onları sayıyor. Bu bir sınıf düzeyinde yöntemi olması gerektiği gibi sadece görünüyor. Katılıyor musunuz? Do, ben bir sınıf düzeyi işlevin içinde çerçeve içinde gelen veritabanına erişebilir biliyor yoksa?

Teşekkürler!

5 Cevap

Eğer User_model başlatmasını değil olduğundan, CI örneği almak gerekir, sonra db sorguları için bu kullanın.

Get_total_users_count inside ():

$ci_ins =& get_instance();
$ci_ins->db->query();

CodeIgnighter çalışır bunları yüklemek gibi modelleri başlatmasını gereğidir. Ne Thorpe Obazee sizin modeli kullanmak için doğru codeIgnighter yolu olduğunu söyledi.

Sadece CI nasıl çalıştığını, hangi değil çoğu durumda beklediğiniz gibi statik bir yöntemi kullanabilirsiniz ne soruyorsun olduğunu.

Sonra konum ne başarmak için, mives ana CI nesneye ulaşmak için doğru yol olan () get_instance işaret. Kendimi ne yaptığınızı yapmak için bu yolu kullanabilirsiniz.

Bir örneği olarak yük olmayacak bu yüzden bir yardımcı olarak sınıf yapabilirsiniz. Sadece kod yüzden sadece olarak arayabilirsiniz dahil edilecektir:

$sample = class_name::method();

get_total_user_count kullanıcı tablo ağ geçidi için bir fonksiyonun daha fazladır.

Kullanıcı modeli getUsername ve getLastLogin gibi şeyler olmalıdır.

Kullanıcı Tablo Geçidi findUserById, createNewUser gibi şeyler var, ve getTotalUserCount olmalıdır

 $pagedata['numberofpeople'] = $this->user_model->get_total_users_count();

Bu CI yoludur.