2014-04-04 1 views
0

저는 학교 프로젝트를하고 있으며 처음으로 laravel 프레임 워크를 사용하고 있습니다. 나는 작은 문제가있어서 며칠 동안 붙어서 여러 가지 방법을 시도했다. 아무 것도 효과가 없었다.PHP - 클래스 내부의 전역 변수 - 내부 함수 내에서 액세스 할 수 있습니다.

나는 여러 인수를 취한 후 db를 통해 while 루프에서 '전역'배열 안에 모든 결과를 추가하는 시간 함수를 만든 다음 다른 함수가 전역 배열을 테스트하고 내부 값을 확인합니다.

난 데 문제는 내가 제대로 전역 배열에 액세스하는 기능을 얻을 수 있다는 것입니다

:

나는 온라인으로 다른 많은 아이디어를 시도했지만 수를, t가 클래스의 내부 기능을 얻을 전역 배열에 액세스 -

누구든지 간단한 방법을 알고 있습니까? 감사합니다

은 (맨 상기 - 클래스 전에, 또한 클래스 내부 상단에) 시도

$Global['ScheduleTest'] = array(); 

global $ScheduleCheck = array(); 

(inside class) private $ScheduleCheck = array(); 

전체 코드 :::::::

<?php 

global $ScheduleCheck = array() ; 

class CourseRegistrationController extends BaseController { 

public function __construct() { 
    $this->beforeFilter('csrf', array('on'=>'post')); 
} 

..... 

// Function to test time overlaps 

function testTimeOverlap($course ,$regday, $start_time,$end_time) 
    { 
     $start_time1 = (substr($start_time, 0, 5)) ; 
     $end_time1 = (substr($end_time, 0, 5)) ; 

     $ScheduleArr = makeSchedule(); 

     $reg_days = explode(",",$regday); 

     foreach ($reg_days as $rday) 
     { 
      foreach ($ScheduleArr as $schedule) 
      { 

       if((strtolower($rday))==(strtolower($schedule['day']))) 
       { 

        $start_time2 = (substr($schedule['stime'], 0, 5)) ; 
        $end_time2 = (substr($schedule['etime'], 0, 5)) ; 

        if(testTime($start_time1,$end_time1,$start_time2,$end_time2)) 
        { 
         array_push($ScheduleCheck, array("course"=>$course,"value"=>"true","day"=>$rday)); 
        } 
        else 
        { 
        array_push($ScheduleCheck, array("course"=>$course,"value"=>"false","day"=>$rday)); 
        } 

       } 
       else 
       { 
        array_push($ScheduleCheck, array("course"=>$course,"value"=>"true","day"=>$rday)); 
       } 

      } 

     } 
    } 


// Another function to go through the global array 

function finalTimeTest() 
    { 
     testNewTime((strtolower(Input::get('course_id'))),(strtolower(Input::get('lecture_id'))),(strtolower(Input::get('tutorial_id'))),(strtolower(Input::get('lab_id')))); 

     foreach($ScheduleCheck as $ckTime) 
     { 
      if($ckTime['value']=="true") 
      { 
       return true; 
      } 
      else 
      { 
       return ($ckTime['course']." "); 
      } 
     } 
    } 

?> 
+0

:

App::instance('schedule', new ScheduleChecker); 

그런 다음 컨트롤러에서 $scheduleCheck 속성을 가져올 수 : 당신은 ** 글로벌 ** 키워드를 가져 와서 OOP의 개념을 깨고 있습니다. –

+0

상위 변수에 설정된 개인 변수와 같은 다른 방법을 시도했습니다 ... 작동하지 않습니다. – Jimmy

+0

** 전역 변수를 사용하지 말고 대신 멤버를 public으로 만들어 클래스 외부에서 액세스 할 수 있도록합니다. –

답변

1

이 " 함수 "는 클래스의 메소드로 정의되어야합니다.

class ScheduleChecker { 

    protected $scheduleCheck = array(); 

    // Your functions should be placed in here! 

    public function getScheduleCheck() 
    { 
     return $this->scheduleCheck; 
    } 

} 

그런 다음 메소드 내부에서 속성을 참조 할 수 있습니다.

public function finalTimeTest() 
{ 
    // Using $this to call the testNewTime method. 
    $this->testNewTime((strtolower(Input::get('course_id'))),(strtolower(Input::get('lecture_id'))),(strtolower(Input::get('tutorial_id'))),(strtolower(Input::get('lab_id')))); 

    // Using $this to get the scheduleCheck property. 
    foreach($this->scheduleCheck as $ckTime) 
    { 
     if($ckTime['value']=="true") 
     { 
      return true; 
     } 
     else 
     { 
      return ($ckTime['course']." "); 
     } 
    } 
} 

당신은 아마 (app/start/global.php에) Laravel의 컨테이너에이를 바인딩 할 수 있습니다 : 참고로

$scheduleCheck = App::make('schedule')->getScheduleCheck(); 
관련 문제