2010-12-05 7 views
0

J'ai donc une classe qui ressemble à ceci (exemple)des variables assignant à toute la classe [Best Practice?]

class Statistics extends Controller { 


function __construct() 
{ 
    parent::Controller(); 
    $data['title'] = 'Statistics'; 
    //Locale 
    setlocale(LC_MONETARY, 'en_US'); 
    date_default_timezone_set('America/Chicago'); 
    //Require Login 
    $this->load->library('session'); 
    if($this->session->userdata('affid')) 
    { 
    $this->load->view('userhead',$data); 
    } 
    else 
    { 
    header("Location: /network/login/submit"); 
    } 
} 

//Index page. Show stat display options 
function index() 
{ 
    $this->load->view('statoptions'); 
    $this->load->view('footer'); 
} 

//Stats by offer 
function offer() 
{ 
    $this->load->library('statistics'); 
    $this->_getvars(); 
    if(!$getsort && $direction) 
    { 
    $sort = array('Stat.offer_id' => 'desc','Stat.revenue' => 'desc'); 
    } 

    $stats = $this->statistics->aff_stats($affid,$startdate,$enddate,'Stat.offer_id',$sort); 
    $data['statdate'] = array('start' => $startdate, 'end' => $enddate); 
    $data['stats'] = $stats['data']; 
    $data['statview'] = 'offer'; 
    $data['dir'] = 'desc'; 
    if($direction == 'desc') 
    { 
    $data['dir'] = 'asc'; 
    } 
$this->load->view('statistics',$data); 
#print_r($data['stats']); 
} 

//Stats by day 
function daily() 
{ 

$stats = $this->statistics->aff_stats($affid,$startdate,$enddate,'Stat.date',$sort); 
$data['statdate'] = array('start' => $startdate, 'end' => $enddate); 
$data['stats'] = $stats['data']; 
$data['statview'] = 'daily'; 
    $data['dir'] = 'desc'; 
    if($direction == 'desc') 
    { 
    $data['dir'] = 'asc'; 
    } 
$this->load->view('statistics',$data); 
#print_r($stats); 
} 

//Stats by Affiliate's SubID 
function subid() 
{ 
$stats = $this->statistics->aff_stats($affid,$startdate,$enddate,'Stat.affiliate_info1',$sort); 
$data['statdate'] = array('start' => $startdate, 'end' => $enddate); 
$data['stats'] = $stats['data']; 
$data['statview'] = 'subid'; 
    $data['dir'] = 'desc'; 
    if($direction == 'desc') 
    { 
    $data['dir'] = 'asc'; 
    } 
$this->load->view('statistics',$data); 
#print_r($stats); 
} 
} 

Je les variables suivantes pour pouvoir être appelé dans toutes les fonctions au sein de ma classe .

 $affid = $this->session->userdata('affid'); 
    $startdate = preg_replace('/[^\d-]+/', '', $this->input->get_post('start')); 
    $enddate = preg_replace('/[^\d-]+/', '',$this->input->get_post('end')); 
    if(!$startdate) 
    { 
    $startdate = date("Y-m-d"); 
    } 
    if(!$enddate) 
    { 
    $enddate = date("Y-m-d"); 
    } 
    $getsort = htmlspecialchars($this->input->get_post('sort'),ENT_QUOTES);  
    $direction = htmlspecialchars($this->input->get_post('dir'),ENT_QUOTES); 
    if($getsort && $direction) 
    { 
    $sort[$getsort] = $direction; 
    } 

Quelle est la meilleure pratique pour affecter des variables à l'ensemble de la classe?

C'est un contrôleur CodeIgniter par la façon dont

+0

Pas agréable de modifier toute la question comme ça. –

+1

@Robin Orheden, * d'accord. * Reprise de la question à sa version originale. @DevNull, si vous voulez supprimer une question, utilisez le lien 'delete' pour le faire. Bien que je ne suis pas sûr de savoir pourquoi vous devriez supprimer une question valide. –

+0

@David Thomas: Selon son profil, il dit "Utilisateur non enregistré", je pense qu'ils ne voient pas le lien de suppression. – BoltClock

Répondre

0

Je ne suis pas certain que je comprends ce que vous demandez, mais si c'est ce que je pense que vous voulez dire, vous utilisez « statique »:

class Statistics extends Controller { 
    static $startdate; 

puis vous faites référence dans un procédé tel que

self::$startdate; 
2

Je devine que vous avec la moyenne « classe entière », il est plein champ. Fondamentalement ayant un domaine public:

public class StatisticsController extends Controller { 
    private $StartDate = null; 

    public __construct() 
    { 
     $this->StartDate = date(DATE_RFC822); 
    } 

    public function GetStartDate() 
    { 
     return $this->StartDate; 
    } 
} 

$controller = new StatisticsController(); 
echo($controller->GetStartDate()); // prints something like: Mon, 15 Aug 2005 15:12:46 UTC 
+0

Ce que j'essaye de demander est comment assigner des variables dans le constructeur, et puis pouvoir les référencer dans d'autres fonctions dans la classe de contrôleur. – DevNull

+0

J'ai mis à jour ma réponse. GetStartMethod récupère maintenant (et renvoie) la valeur Date/Time définie dans le constructeur. Si vous pensez que cela a répondu à votre question, veuillez fermer cette question et accepter la réponse. –

+0

Si votre intention était que la variable ne devrait être que dans la portée de la classe, elle devrait probablement être privée. Cela donnerait également un but à la fonction publique GetStartDate(). –

Questions connexes