파일 및 뷰를 포함하여 거의로드하지 않는 정적 클래스가있는 스크립트를 작성하고 있습니다. 컨트롤러에서 로더보기 메서드에서 컨트롤러 변수를 가져 오는 중입니까?
class load
{
public static function view($file_path, $area)
{
debug::log('getting view <b>' . $area . $file_path . '</b>.');
ob_start();
self::file($file_path, 'areas/' . $area . '/views');
debug::log('flushing view <b>' . $area . $file_path . '</b>.');
eturn ob_get_clean();
}
public static function file($file, $folder)
{
if(is_file($file_path = ROOT . '/' . $folder . '/' . $file))
{
if(require_once $file_path)
{
debug::log('file <b>' . $file_path . '</b> included.');
return true;
}
}
else
debug::kill('requested file <b>' . $file_path . '</b> does not exist.');
}
}
은 임 뷰 얻기 위해 뷰 메서드를 호출 : 분명히
$html = load::view('public', 'path/to/view/file.php');
, 이러한 행위를 사용하여 뷰 파일에서 컨트롤러에서 변수에 액세스 할 수 임 수 없습니다를, 그래서 내가 그랬어 뷰 클래스에 작은 수정은 바르 캡처 :
public static function view($file_path, $area, $vars = array())
을 그리고 바르에 열쇠를 얻을 코드의 다음 줄을 추가 :
while(list($n_list_var,$v_list_var)=each($vars))
$$n_list_var = $v_list_var;
하지만 다시 파일을로드하는 메소드를 사용하여 이후 vars에 액세스 할 수 없습니다.
파일을 포함 할 필요가있을 때마다 각 파일 포함 시도를 테스트하고 기록하기 때문에 코드를 반복하지 않으므로 파일을로드하는 방법이 있습니다. 그리고 로더 클래스 내부에 로더 뷰가 있으므로이 모든 메서드를 함께 사용합니다. 클래스를 사용하여 파일을로드하는 것을 포기해야합니까? 내 컨트롤러에서 확장 가능한 클래스에 대한 로더보기 메서드를 사용해야합니까?
내 전체 스크립트를 수정하는 대신 몇 가지 의견을 듣고 싶습니다 ... 갈 가장 좋은 방법은 무엇입니까? 아니면 내 문제를 해결할 방법이 있습니까? 어쩌면 __set과 __get 마법 방법을 사용하고 있을까요?
감사합니다,
load :: file 메서드는 파일 만 포함하기 위해 사용되며 클래스가 포함 된 파일을로드하는데도 사용되어 vars를 추출 할 필요가 없습니다. 내 이해에 나쁜 연습이 될거야. 그런 이유로 나는 몇몇 대안을 찾고있다. (고마워, 나는 extract() 함수를 완전히 잊었다.) 그리고 왜 Load라는 이름을 지정하는 것이 좋은 생각일까요? – Henrique
좋아, 변수를 사용하지 않고 파일을로드하려면'$ vars' 배열을 생략 할 수 없습니까? 나 자신을 포함한 많은 사람들이 클래스 이름의 대문자 사용을 고려합니다. – JMM
예 할 수 있습니다. 나는 그저 나쁜 행동이라고 생각합니다. 어쩌면 모든 일을하는 것이 좋은 연습이 아니므로이 문제에 대한 대안을 더 많이 얻으 려합니다. 그 밖의 어떤 것도 내게 오지 않으면 나는 그것을 할 것이다. 감사합니다, – Henrique