2009-11-19 3 views
5

OOP PHP 프레임 워크에서 "유틸리티"기능을 처리하는 가장 좋은 방법은 무엇입니까? 지금은 시스템 전체에 필요한 여러 기능을 가진 파일 만 있습니다. (예 : 함수는 값과 배열을 받아들이고 값이 입력 배열과 동일한 비율 및 동일한 키로 분산 된 배열을 반환합니다.)PHP의 유틸리티 파일?

나는 항상 "더러운" 그것은 객체 지향적 인 것이 아닙니다. 이것을 정적 메소드처럼 다양한 클래스로 옮기는 것이 더 나은 방법인가 아니면 단지 의미 론적 해결 방법입니까? 아니면 어떤 물건이 OOP 구조 외부에 떨어질 수있는 프레임 워크의 레벨이 될 것입니까?

답변

3

저는 항상 이와 같은 질문에 대해 더욱 실용적이었습니다.

full-OOP로 이동하려면 분명히 클래스에 붙여야합니다. 그러나 이러한 클래스는 실제로는 어떤 종류의 객체도 나타내지 않기 때문에 컨테이너 클래스가 될뿐입니다.

또한 클래스를 사용하려면 클래스 패턴을 사용하거나 모든 함수를 정적으로 선언해야합니다. 첫 번째 것은 더 느립니다. (좋아요, 그다지 많지 않을 수도 있지만 큰 프레임 워크에서는 PHP와 같은 인터프리터 언어에서도 그렇습니다.) 두 번째와 세 번째는 그냥 쓸모없고 단순히 OOP 래퍼입니다 기능 세트 (특히 세 번째 접근법).

수정 : 저를 잘못 알고 계셔도 좋습니다. 나는 있을지도 모른다. 나는 너무 경험이 없으며 항상 그런 식으로 보았지만 잘못되었을 수도 있습니다.

+0

+1 좋은 답변입니다. –

+1

Seconded. 100 % OOP가되기 위해 모든 것을 객체로 변환하는 것은 의미가 없습니다. –

+1

함수를 OOP 래퍼로 푸시하고 정적으로 선언하는 이점은 함수를 호출 할 때 함수가 정의 된 코드의 독자에게 명시 적으로 명확하다는 것입니다. 사실이 기술을 사용하여 네임 스페이스를 시뮬레이션합니다. – jkndrkn

2

나는 항상 유틸리티 함수를 표준 PHP 함수의 확장이라고 생각한다. 객체 지향적이지 않기 때문에 객체 지향적이지 않습니다.

5

정적 메서드 만 포함하고 특성을 가지지 않으며 상속되지 않는 Util() 클래스를 만드는 경향이 있습니다. 본질적으로, 유틸리티 함수의 "네임 스페이스"역할을합니다. 이 클래스의 크기를 늘릴 수는 있지만, 특정 종류의 데이터에서만 작동하도록 설계되었거나 관련 메서드 그룹이 있어야하는 것이 확실한 경우에는 때때로 메서드를 자체 클래스로 분할합니다. 어쩌면 일부 속성과 함께 클래스로 그룹화됩니다.

편차가있는 코드가 체계적이며 시스템에서 아키텍처의 결함을 이해하고 유지 관리하기가 어렵지 않는 한 순전히 OOP 관행에서 벗어나는 것이 좋습니다.

+0

필자는 첫 번째 부분, 특히 Util 클래스에 동의하지 않습니다. 왜 내 대답을 읽어보십시오. 그러나 그 후에 쓴 것은 나에게 생각이 들었다. 이러한 서브 세트가 단지 정적 함수의 모음 일 뿐이며, 예를 들어 몇 가지 결합 된 속성 (나쁜 예이지만 마음에 오는 유일한 속성 :보기가 클래스 멤버 인 한 클래스의 헬퍼보기 - 나는 당신이 요점을 얻길 바랍니다.) +1 – Franz

+0

실례합니다. 투표 한도를 잊어 버렸습니다. 죄송합니다. 네 더 많은 시간;) – Franz

+0

글쎄, 나는 일반 Util 클래스를 사용하여 모든 종류의 작은 편리한 함수를 볼 수 있으며, 공통점이있는 "네임 스페이스"즉 객체와 함께 깨끗하게 유지할 수 있습니다. 실제로 정적이라고 정의 할 필요가 있습니다.하지만, 뭐가 잘못 되었나요? – ChrisR