2010-06-17 8 views
0

Si je voudrais avoir plusieurs méthodes statiques dans mes modèles afin que je puisse dire User::get_registered_users() et l'avoir fait quelque chose commeCodeIgniter question de classe statique

public static function get_registered_users() 
{ 
    $sql = "SELECT * FROM `users` WHERE `is_registered` = 0"; 
    $this->db->query($sql); 
    // etc... 
} 

Est-il possible d'accéder à l'objet $this->db ou créer un nouveau pour une méthode statique?

+0

De nombreuses structures n'utilisent pas de méthodes statiques pour diverses raisons. Le plus important est la liaison statique tardive qui est offerte en PHP5.3 mais pas avant. Vous ne pourrez pas utiliser '$ this' dans une méthode statique, vous devrez instancier une nouvelle instance db et lancer une requête sur celle-ci. –

+0

@Matt: Correct, comment puis-je faire cela? –

Répondre

0

Matt S est correct, même si Kohana a été construit pour PHP5, donc la compatibilité précédente n'est pas vraiment un problème.

Les méthodes statiques n'ont pas accès à d'autres variables. Si la variable était définie comme self :: db, vous pourriez l'utiliser ensuite, et vous pourriez vouloir l'instancier de cette façon pour le faire.

Les méthodes statiques sont les meilleures pour les choses qui ne nécessitent pas des objets, tels que le formatage du texte, la redirection des pages, etc.

3

Il est simple:

get_instance()->db...

ou

$CI =& get_instance(); 
$CI->db->get('users')->result(); 
$CI->session->set_userdata('login', TRUE); 

+0

Serait utile, lors de la publication d'une suggestion au code source OP, d'utiliser réellement le code source OP et de changer cela. – dbf