2011-02-08 2 views
0

아래의 코드는 사용자가 제어판에 액세스 할 때 빠른 확인 프로세스를 통해 해당 항목이 유효한지 확인합니다. 예를 들어, 사용자가 레벨 1 인 경우 비디오 피드에 대한 액세스 만 제공되므로 다른 사람이 사용할 수 없음을 의미합니다.PHP 사례 스위치 (효율성)

코드를 살펴보면 케이스 1과 케이스 3이 호출 될 때 비디오 피드가 호출되는 것을 볼 수 있습니다. 코드를보다 효율적으로 만들 수있는 대안을 누리고 싶습니다.

가능한 배열로 인해 작업이 좀 더 쉬워 질 수 있다고 말했지만, 이는 다시 빠릅니다.

switch ($_SESSION['permission']) { 
     case 1: // Level 1: Video Feed 
      include ("include/panels/videofeed.index.php"); 
      break; 
     case 2: // Level 2: Announcements/Courses/Teachers 
      include ("include/panels/announcements.index.php"); 
      include ("include/panels/courses.index.php"); 
      include ("include/panels/teachers.index.php"); 
      break; 
     case 3: // Level 3: Announcements/Video Feed/Courses/Teachers/Accounts/Logs 
      include ("include/panels/announcements.index.php"); 
      include ("include/panels/videofeed.index.php"); 
      include ("include/panels/courses.index.php"); 
      include ("include/panels/teachers.index.php"); 
      include ("include/panels/accounts.index.php"); 
      include ("include/panels/log.index.php");  
      break; 
     case 4: // Level 4: Teachers 
      include ("include/panels/teachers.index.php");   
    } 
+0

불투명 한 코드를 0.0000001 초에 이룰 필요가있는 경우에는 그렇지 않습니다. 각 개발자는 읽기 쉽고 최적화하기 쉬운 코드를 작성해야합니다. – zerkms

+1

나는 컴퓨터가 꽤 비효율적이지는 않다. 아마 주위에 몇 가지 코드를 뒤섞 일 수 있지만, 근본적으로 많이 바뀔 수있는 것처럼 보이지는 않습니다. – deceze

+1

당신은 마법의 숫자 사용을 멈추고 권한 수준을 설명하는 대신에 상수를 정의해야합니다. 예 : 'PERMISSION_VIDEO_FEED'사례. – deceze

답변

1

프리스트 가능한 경우 require_once을 사용하면 을 더 잘 실행할 수 있습니다.. 두 번째 요점은 URL의 길이를 줄이는 것입니다.

어쩌면 예를 들어, 함수를 사용하려고 :

$permission_id = $_SESSION['permission'] 

function requireModule($moduleName, $path = 'include/panels/') { 
    $moduleName .= '.index.php'; 
    require_once($path . $moduleName); 
} 

// if you want you can add an arry for it: 

$permissionModules = array(
    array('videofeed'), 
    array('announcements', 'courses', 'teachers'), 
    array('announcements', 'courses', 'teachers', 'accounts', 'log', 'videofeed'), 
    array('teachers') 
); 

// now we can put it in a more effectiv way 

if(array_key_exists($permission_id, $permissionModules)) { 
    foreach($permissionModules[$permission_id] as $includes) { 
     requireModule($includes); 
    } 
} 

잘못? 정정 해줘!

+0

이것은 놀라운 것입니다! 내가 가져 오는 그 모든 방법을 잊어 버렸습니다. 나는 몇 가지 벤치 마크를 달릴 것이지만 나는 이것을 많이 좋아한다! 정확하게 내가 설치를 묘사 한 방법입니다. :) – blanknamefornow

4

괜찮습니다. 나는 당신이 "반복 된"포함을 참조 할 때 "효율성"을 의미하지 않는다고 생각합니다. 스위치 추락을 사용하여 코드를 압축 할 수 있습니다.

코드가 작아 질 수는 있지만 효율성 (스크립트가 실행되는 데 걸리는 시간)에는 별다른 영향을 미치지 않으며 실제로 코드를 읽기가 더 어렵게 만듭니다. 그대로 놔둬.

+0

파일을 호스팅하는 현재 서버가 압축 형식을 사용하지 않기 때문에 효율성이 높아질 수 있습니다. 따라서 모든 경우에 0.06 초가 걸리지 만 내 경우에는 더 적습니다. – blanknamefornow

+0

가을철에 충돌없이 어떻게 할 수 있습니까? 나는 아마도 몇 가지 스위치를해야 할 것입니다. – blanknamefornow

+0

@tjm 스크립트를 4 줄 짧게 설정해도 스크립트가 상당히 빠르게로드되지는 않습니다. 압축을 언급 할 때 HTTP 응답에서 압축을 언급하면이 질문과 아무 관련이 없습니다. – Artefacto