2010-12-05 12 views
0

So habe ich eine Klasse, die wie dieses (Beispiel) siehtzuweisen Variablen ganze Klasse [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); 
} 
} 

Ich habe folgende Variablen der Lage sein, auf in meiner Klasse in jeder Funktion aufgerufen werden .

 $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; 
    } 

Wie werden die Variablen am besten der gesamten Klasse zugewiesen?

Dies ist ein Code Igniter Controller durch die Art und Weise

+0

Nicht schön, die ganze Frage so zu ändern. –

+1

@Robin Orheden, * stimmte zu. * Rollt die Frage auf ihre ursprüngliche Version zurück. @DevNull, wenn Sie eine Frage löschen möchten, verwenden Sie dazu den Link "Löschen". Obwohl ich nicht sicher bin, warum Sie eine gültige Frage löschen sollten. –

+0

@David Thomas: Laut seinem Profil heißt es "Unregistrierter Benutzer", ich glaube, sie sehen den Link zum Löschen nicht. – BoltClock

Antwort

0

Ich bin nicht sicher, ich verstehe, was Sie fordern, aber wenn es ist, was ich denke du meinst, verwenden Sie ‚statisch‘:

class Statistics extends Controller { 
    static $startdate; 

und dann verweisen Sie auf es in einem Verfahren, wie

self::$startdate; 
2

mich mit „ganzer Klasse“, dass Sie erraten meint es voller Umfang ist. Grundsätzlich mit einem öffentlichen Feld:

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

Was ich versuche zu fragen ist, wie man Variablen innerhalb des Konstruktors zuweisen und dann in anderen Funktionen innerhalb der Controller-Klasse verweisen kann. – DevNull

+0

Ich habe meine Antwort aktualisiert. GetStartMethod ruft nun den im Konstruktor festgelegten Date/Time-Wert ab (und gibt ihn zurück). Wenn Sie der Meinung sind, dass dies Ihre Frage beantwortet hat, dann schließen Sie bitte diese Frage und akzeptieren Sie die Antwort. –

+0

Wenn Ihre Absicht war, dass die Variable nur innerhalb der Klasse enthalten sein sollte, sollte sie wahrscheinlich privat sein. Dies würde auch der öffentlichen GetStartDate() - Funktion einen Zweck geben. –