2013-03-08 2 views
0

나는 나의 admin.php 컨트롤러에서이 같은 있습니다생성자가 배열을 보지 않고 전송하는 이유는 무엇입니까?

function __construct() 
{ 
    parent::__construct(); 
    if (!$this->session->userdata('logged_in_admin')) 
    { 
     redirect('admin/login'); 
    } 
    $this->load->model('mdl_admin'); 
    $data['my_test_variable'] = "This is test!"; 
} 

public function index() 
{ 
    $data['header'] = "Home"; 
    $this->load->view('admin_frontpage', $data); 
} 

을 그리고 내 생각이에 :

<?php echo $header; ?> 
<?php echo $my_test_variable; ?> 

헤더 변수는 반향된다. 뷰 파일로 전송되는 $ 데이터 배열에 my_test_variable도 포함됩니다.

왜 그럴까요?

내가 뭘 잘못하고 있니?

내가 예컨대을 : 시도하더라도

가 작동하지 않습니다
$this->data['my_test_variable'] = "This is test!"; 

.

답변

1

우선 PHP에서 변수를 암시 적으로 생성하고 있습니다. 이는 나쁜 습관입니다. 존재하지 않는 변수에 배열 키를 설정하면 안됩니다. 적절한 오류보고 설정을 사용하면 문제가 발생할 수 있습니다.

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

    if (!$this->session->userdata('logged_in_admin')) { 
     redirect('admin/login'); 
    } 

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

    $data = array(); 
    $data['my_test_variable'] = "This is test!"; 
} 

public function index() { 
    $data = array(); 
    $data['header'] = "Home"; 
    $this->load->view('admin_frontpage', $data); 
} 

을 그리고, 그 일에, 나는 당신이 지금 당신의 문제를 볼 수 있어야한다고 생각 :

그래서, 먼저, 그 문제를 해결 할 수 있습니다. __construct()index() 메서드는 다른 스택으로 실행됩니다. 그 의미는 안에있는의 변수를 다른 변수에 사용할 수 없다는 것을 의미합니다.

class MyView { 
    protected $data = array(); 

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

     if (!$this->session->userdata('logged_in_admin')) { 
      redirect('admin/login'); 
     } 

     $this->load->model('mdl_admin'); 
     $this->data['my_test_variable'] = "This is test!"; 
    } 

    public function index() { 
     $this->data['header'] = "Home"; 
     $this->load->view('admin_frontpage', $this->data); 
    } 
} 

그리고 지금 당신은 당신이

+0

당신이 배열에 맞아 큰 답변을 주셔서 감사합니다 ....이 시도보기

 function __construct() { parent::__construct(); if (!$this->session->userdata('logged_in_admin')) { redirect('admin/login'); } $this->load->model('mdl_admin'); } public function index() { $data['header'] = "Home"; $data['my_test_variable'] = "This is test!"; $this->load->view('admin_frontpage', $data); } 

로 데이터를 전달합니다. – Derfder

2

그러나 $data 계신 얻어야한다 : 당신이이 일을하기 위해해야 ​​할 일은 이런 만들고있는 클래스의 인스턴스 변수를 활용이다 보기로 전송 된 배열에도 my_test_variable이 포함되어 있지 않습니다. index() 함수에서는보기로 보낼 때 해당 값을 설정하지 않습니다.

__construct()에서 $data__construct() 함수 내에서만 볼 수있는 로컬 변수입니다. 함수 외부에서 액세스하려는 경우 index() 함수에서 인스턴스 속성으로 사용하는 것이 좋습니다.

예를 들어

, 대신 $data['my_test_variable'], 당신은, 다음, index()에 다시 대신 $data, 당신이 $this->data을 사용할 수 $this->data['my_test_variable'] 사용할 수 있습니다.

+0

하지만 생성자에 있으므로 모든 함수에 사용할 수 있습니다. – Derfder

+0

@Derfder, 대답이 업데이트되었습니다. 어디서나 사용할 수있는 것은 아닙니다. '__construct()'는 다른 함수와 같은 함수이며 함수 범위를 가지고 있습니다.따라서 함수 범위에 정의 된 모든 변수는 함수 범위에 그대로 있습니다. Java와 같은 다른 언어를 사용하는 경우 인스턴스 속성을 참조하려는 경우 PHP에서 '$ this'를 사용하는 것이 필수라는 점에 유의하십시오. – rid

+0

오케이, 이해합니다. – Derfder

2

관련 문제