2011-08-22 3 views
5

변수 유효 범위 문제가 조금 행복합니다. 어쩌면 난 그냥 더 커피를 필요 ...PHP/CodeIgniter - __construct()에서 변수를 설정했지만 다른 함수에서 액세스 할 수 없습니다.

여기

내 (간체) 코드는 -이 CodeIgniter의 2에 있습니다

class Agent extends CI_Controller {  

public function __construct() 
{ 
    parent::__construct(); 

    $this->load->model('agent_model'); 

    // Get preliminary data that will be often-used in Agent functions 
    $user = $this->my_auth_library->get_user(); 
    $agent = $this->agent_model->get_agent($user->id); 
} 

public function index() 
{  
    $this->template->set('info', $this->agent_model->get_info($agent->id)); 

    $this->template->build('agent/welcome'); 
} 

불행하게도, 내가 인덱스 기능을 실행할 때, 나는 말했다 해요 :

A PHP Error was encountered 

Severity: Notice 
Message: Undefined variable: agent 
Filename: controllers/agent.php 
Line Number: 51 

줄 51은 인덱스 함수의 첫 번째 줄입니다. 무슨 일있어? 이 문제가 범위 문제입니까?

감사합니다. $this->Agent = ...;$this->Agent->id과 같은 방식으로 액세스 : 당신이 접근은 다음 클래스의 속성, 즉로 설정해야 생성자에 설정된 변수를 원하는 경우

+0

사용하여 얻을 수 있습니다. http://www.php.net/manual/en/language.oop5.properties.php를 참조하십시오. – hakre

답변

11

는 당신은 당신의 인덱스 작업에 $agent을 설정하지 않았습니다. 예를 들어 (나는 그들이 객체뿐 아니라 변수임을 보여주기 위해 활용할 것) :

생성자는 다른 클래스 메소드와 같은 동작

이 유일한 특별한 속성이 클래스가있을 때 자동으로 실행 점이다

$this->User = $this->my_auth_library->get_user(); 
$this->Agent = $this->agent_model->get_agent($user->id); 
인스턴스화 된 일반 변수 범위가 여전히 적용됩니다.

+0

설명해 주셔서 고맙습니다. 저는 함수 앞에 '__construct()'가 먼저 추가되어 있다고 가정 했었습니다. 얻기 쉬운. 감사! – Jack

9

당신은 다음과 같이 생성자 외부 변수를 정의해야합니다

class Agent extends CI_Controller { 

    private $agent; 
    private $user; 

    public function __construct() { 

     parent::__construct(); 

     $this->load->model('agent_model'); 

     // Get preliminary data that will be often-used in Agent functions 
     $this->user = $this->my_auth_library->get_user(); 
     $this->agent = $this->agent_model->get_agent($user->id); 
    } 

    public function index() { 

     $this->template->set('info', $this->agent_model->get_info($this->agent->id)); 

     $this->template->build('agent/welcome'); 
    } 
} 

는 다음 설정하고 당신은 어떤 클래스 변수, 단지 변수 기능을 설정하지 않을 $this->agent

+0

감사합니다.'$ this-> user -> ... '는 훌륭하게 작동합니다. 감사! – Jack

+1

+1 클래스를 할당하기 전에 클래스를 선언하면 클래스 전체를 추적하는 것이 훨씬 쉬워집니다. – jondavidjohn

관련 문제