문제

include 사용의 장단점에 대한 참고 자료를 갖고 싶습니다. 파일 대 객체(클래스) PHP 애플리케이션을 개발할 때.

나는 이 답변을 얻을 수 있는 한 곳이 있으면 도움이 될 것이라는 것을 알고 있습니다. 나는 내 자신의 의견이 몇 가지 있지만 다른 사람들의 의견도 듣기를 기대합니다.

간단한 예:

내 사이트의 특정 페이지는 로그인한 사용자만 액세스할 수 있습니다.구현에는 두 가지 옵션이 있습니다(다른 옵션도 있지만 이 두 가지로 제한하겠습니다).

  1. authenticate.php 파일을 생성하고 모든 페이지에 포함시키십시오.인증을 위한 논리를 보유합니다.

  2. 인증 기능이 있는 사용자 개체를 생성하고, 모든 페이지에서 인증을 위해 해당 개체를 참조합니다.

편집하다나는 어떤 방법으로든 서로의 이점을 비교하고 싶습니다.나의 현재 (그리고 약한 이유)는 다음과 같습니다:

포함 - 때로는 함수가 더 쉽고 짧은/더 빠르거나 더 빠르거나 더 빠르거나 더 빠르고, 장기 유지 보수를위한 기능 및 속성 리드의 그룹화.

포함 - 작성할 코드가 적고(생성자 없음, 클래스 구문 없음) 나를 게으르다고 부르지만 이는 사실입니다.

사물 - 기능과 생성에 대한 형식성과 단일 접근 방식을 강요합니다.

포함 - 초보자가 물체를 다루기가 더 쉽습니다 - 초보자에게는 더 어렵지만 전문가들에 의해 눈살을 찌푸립니다.

나는 프로젝트를 시작할 때 이러한 요소를 살펴보고 포함을 수행할지 객체를 수행할지 결정합니다.이것들은 내 머리 꼭대기에 있는 몇 가지 장단점입니다.

도움이 되었습니까?

해결책

이것은 실제로 반대되는 선택이 아닙니다.어쨌든 검사 코드를 포함해야 합니다.귀하의 질문을 절차적 프로그래밍과 절차적 프로그래밍으로 읽었습니다.OO 프로그래밍.

몇 줄의 코드나 함수를 작성하고 이를 페이지 헤더에 포함시키는 것이 PHP3 또는 PHP4에서 수행되는 방식이었습니다.간단합니다. 작동합니다(우리가 했던 방식입니다). 오스커머스, 예를 들어 전자상거래 PHP 애플리케이션).

하지만 많은 개발자들이 확인할 수 있듯이 유지 관리 및 수정이 쉽지 않습니다.

PHP5에서는 인증을 위한 자체 데이터와 방법을 전달하는 사용자 개체를 작성합니다.사용자 및 인증과 관련된 모든 것이 한 곳에 집중되므로 코드가 더 명확해지고 유지 관리가 쉬워집니다.

다른 팁

질문이 매우 논쟁의 여지가 있는 몇 가지 문제(OOP, 사용자 인증)에 대해 다루고 있으므로 해당 문제와 __autoload에 대한 두 번째 Konrad의 의견은 건너뛰겠습니다.C/C++를 아는 사람이라면 파일을 포함하는 것이 얼마나 어려운 일인지 알 것입니다.PHP5에 추가된 자동 로드를 사용하면 OOP(제가 거의 독점적으로 사용함)를 사용하기로 선택한 경우 몇 가지 표준 파일 명명 규칙만 사용하고 (권장합니다) 파일당 단일 클래스를 제한하면 나머지는 PHP가 자동으로 수행합니다.코드를 정리하면 더 이상 필요하지 않은 포함을 제거하는 것을 기억하는 것에 대해 더 이상 걱정할 필요가 없습니다(포함과 관련된 많은 문제 중 하나).

현재 직장에서는 PHP를 사용하고 있지만 PHP 경험이 많지 않습니다.일반적으로 대규모 시스템은 OO가 제공하는 가독성과 이해성으로 인해 이점을 얻는다는 것을 알았습니다.하지만 일관성(OO와 비OO를 혼합하지 마세요)과 개인 선호도(실제로는 개인 프로젝트에만 해당)도 중요합니다.

나는 결코 사용하지 않는 법을 배웠다 include 내가 사용하는 핵심 라이브러리와 하나의 중앙 라이브러리를 제외하고 PHP에서 include 애플리케이션에 이러한 라이브러리(+ 구성)가 있습니다.다른 모든 것은 전역 변수에 의해 처리됩니다. __autoload 필요한 다양한 클래스를 인식하도록 구성할 수 있는 핸들러입니다.이는 클래스에 대한 적절한 명명 규칙을 사용하여 쉽게 수행할 수 있습니다.

이는 유연할 뿐만 아니라 매우 효율적이며 아키텍처를 깨끗하게 유지합니다.

좀 더 구체적으로 말씀해 주시겠어요?제시한 예에서는 두 가지 방법 모두에 include를 사용해야 합니다.1의 경우 파일만 포함하고, 2의 경우 User 클래스의 인스턴스화를 허용하려면 클래스 파일(예: user.class.php)을 포함해야 합니다.

나머지 애플리케이션이 어떻게 구축되는지에 따라 다릅니다. OO인가요?OO를 사용하세요.

수업 시간에 하든, 좀 더 절차적인 방식으로 하든 다음 사항만 확인하면 됩니다.

  1. 세션이 있습니다.
  2. 세션이 유효합니다.그리고,
  3. 세션을 소유한 사용자가 적절한 권한을 가지고 있는지 확인합니다.

세 단계를 모두 하나의 함수로 캡슐화할 수 있습니다(또는 Session 클래스의 정적 메서드가 작동할 수도 있음).이 시도:

class Session
{
  const GUEST = 0;
  const SUBSCRIBER = 1;
  const ADMINISTRATOR = 2;

  public static function Type()
  {
    session_start();

    // Depending on how you use sessions on
    // your site, you might just check for the
    // existence of PHPSESSID. If you track
    // every visitor with sessions, however, you
    // might want to assign some separate unique
    // number (that you can track in a DB) to
    // authenticated sessions
    if(!$_SESSION['uniqid'])
    {
      return Session::GUEST;
    }
    else
    {
      // For the best security, don't store the
      // user's access permissions in the $_SESSION,
      // but rather check against the DB. This will
      // ensure that recently deleted or downgraded
      // administrators will not be able to make use
      // of a previous session.

      return THE_ACCESS_LEVEL_ACCORDING_TO_THE_DB
    }
  } 
}


// In your files that need to check for authentication (you
// could also do this in a controller if you're going MVC

if(!(Session::Type() == Session::ADMINISTRATOR))
{
  // Redirect them to wherever you want them to go instead,
  // like a log in page or something like that.
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top