2009-03-02 4 views
4

좋은 디자인은 각 함수를 한 번만 쓰면됩니다. PHP에서는 include_once라는 PHP 명령을 사용하여 Incluils 파일 (Utils.php 및 Authenticate.php 등)을 사용하여이 작업을 수행합니다. 그러나 PHP 포함 파일에 대한 표준이나 모범 사례를 찾을 수 없었습니다. StackOverflow에서 무엇을 제안 하시겠습니까?PHP 함수를위한 디자인 팁 파일 포함

  • 코드 표준
  • 디자인 패턴 (지금은 단지 연관 배열을 사용하고 있습니다) 일반적인 기능 의 반환 형식을 정의하기위한
  • 제안 표준 명명 : 내가 찾고

    .

답변

7

각 클래스를 ClassName.class.php라는 자체 파일에 넣은 다음 클래스 파일을 포함하도록 autoloader을 설정하는 것이 좋습니다. 또는 때로는 그들을 모두 클래스/하위 디렉토리에 넣고 ClassName.php로 이름을 지정합니다. 얼마나 많은 클래스 대 비 클래스가 포함되는지에 따라 달라집니다.

유틸리티 함수를 클래스로 구성하고 대신 정적 메서드로 만들면 최상위 파일에 require_once() 한 개만 쓸 수 있습니다. 이 방법은 코드 또는 코딩 스타일에 적합 할 수도 있고 그렇지 않을 수도 있습니다.

리턴 유형에 대해서는 내장 함수에서 사용 된 규칙을 따르려고합니다. 요구에 적절한 형태를 돌려 주는지, 실패하면 false를 돌려줍니다. 결과에서 false를 확인할 때 === operator을 사용해야합니다.

규칙에 대한 우려가 있다는 사실은 이미 올바른 방향을 제시하고 있음을 나타냅니다. Java, C++, C# 등과 같은 다른 OOP 언어에 익숙하다면 OOP goodness in PHP5 덕택에 많은 규칙을 따를 수 있습니다.

2

일부 표준은 이미 작성되었습니다. 대부분의 대형 프로젝트는 자체 표준을 따를 것입니다.

젠드 (Zend)가 작성한 것으로 젠드 (Zend) 프레임 워크에서 사용되는 표준입니다. http://pear.php.net/manual/en/standards.php

내 원하는 대답은하지만 자신의 프로젝트에 당신이 편안하게 느끼는 것을 사용하고, 내부적으로 일관성이 있어야한다는 것입니다 : http://framework.zend.com/manual/en/coding-standard.html

또한, PEAR는 항상 어떤 매우 엄격한 코딩 표준을했다. 다른 프로젝트의 경우 해당 규칙을 따르십시오. 일관성은 코드의 가독성을 극대화합니다. 내 표준은 PEAR과 동일하지 않습니다. 나는 4 개의 공백 (들)을 들여 쓰지 않으며 함수 이름과 같은 낙타의 경우는 사용하지 않습니다. 그러나 다른 프로젝트에서 뭔가를 편집 중이라면 그 프로젝트가 수행하는 모든 작업을 수행 할 것입니다.

3

어떤 명명 규칙을 사용하든간에 (가능한 한 Java 또는 C#을 사용하여 단서를 가져 오는 것이 좋습니다.) 포함 할 때 실제로 코드를 실행하지 않고 동일한 코드를 포함하지 않는 함수 용 포함 파일을 사용하는지 확인하십시오 파일 두 번. (include-once 또는 require-once을 사용하십시오.)

0

나는 다음을 수행했다. 먼저 모든 웹 요청을 가로 채기 위해 가로 채기 필터를 만들었고 명령 줄 명령과 함께 사용할 수있는 버전도 만들었습니다.

두 인터셉터 모두 부트 스트랩 파일로 이동하여 오토로더를 설정합니다. 이 파일은 자동 로딩 기능 및 해시입니다. 해시의 경우 키는 클래스 이름이고 값은 클래스 파일의 파일 경로입니다. autoload 함수는 단순히 클래스 이름을 가져 와서 파일에서 require를 실행합니다.

필요한 경우 몇 가지 성능 향상 팁을 제공합니다. 파일을 정의 할 때 작은 따옴표를 사용하십시오. 해석되지 않기 때문에 약간 빠르기 때문에 _once 버전 대신 require/include를 사용하십시오. 한 번 실행하고 전자는 조금 더 빠릅니다.

위의 내용은 훌륭합니다. 사실 많은 클래스가있는 대규모 코드베이스에서도 해시가 그리 크지 않고 성능이 중요한 문제는 아닙니다. 그리고 더 중요한 것은 우리는 미친 pseudo 네임 스페이스 클래스 명명 규칙과 결혼하지 않았다고 봅니다. 아래를보십시오.

다른 옵션은 구분 된 이름, 의사 이름 공간 트릭입니다. 이름 공간에 5.3이 올만큼 매력적이지 않으므로 코드 기반에서 이름을 바꾸는 것이 덜 재미있을 것입니다. 그럼에도 불구하고 이것이 작동하는 방식이며 모든 코드에 대한 루트를 가정합니다. 그런 다음 모든 클래스는 '_'와 같은 문자로 구분 된 디렉토리 트래버 설을 기반으로 이름이 지정되고 클래스 이름 자체는 클래스의 이름을 따서 명명됩니다. 이렇게하면 클래스의 위치가 이름에 인코딩되며 자동 로더가이를 사용할 수 있습니다. really_long_crazy_class_names_MyClass 외에도이 메소드의 문제점은 각 호출에 대해 공정한 처리가 있지만 조기 최적화가 될 수 있으며 다시 이름 공간이오고 있다는 것입니다.

예 :

/code root 
ClassA ClassA.php 
    /subfolder 
    subFolder_ClassB ClassB.php