2008-09-15 3 views
9

필자는 모든 (또는 대부분의) PHP의 내장 함수를보다 객체 지향적 인 클래스 계층 구조로 그룹화하려는 프로젝트가 있는지 궁금합니다. 예를 들어 모든 문자열 함수를 단일 String 클래스로 그룹화하는 경우PHP의 시스템 기능을 객체 지향적으로 만들려고 시도한 사람이 있습니까?

수정 사항이 PHP 소스 코드 수준에서 발생하지 않는 한 실제로는이 문제가 해결되지 않습니다. 왜냐하면 모든 내장 함수 함수는 여전히 전역 네임 스페이스에서 액세스 할 수 있지만 확실히 유용성을 훨씬 쉽게 만듭니다.

답변

4

질문에 대답하려면 네가 말하는 것과 정확히 일치하는 여러 라이브러리가 있습니다. 당신이 사용하고 싶은 것은 완전히 다른 질문입니다. PHPClasses와 pear.org는 그러한 라이브러리를 찾기 시작할 수있는 좋은 장소입니다.

업데이트 : 다른 사람들이 제안한 것처럼 SPL은 좋은 라이브러리이며 많은 PHP 함수를 포함하고 있습니다. 그러나 거기에 아직 포장하지 않는 PHP 함수가 많이 있습니다. 아직도 우리를 은색 탄없이 떠난다.

Cakephp와 Zend (다른 것들도)와 같은 프레임 워크를 사용하면서, 나는 그들 자신의 라이브러리를 포함하고 프레임 워크에 DB 연결성과 같은 기본 사항을 구축함으로써 이러한 문제 중 일부를 해결하려고 시도했다. 따라서 프레임 워크가 다른 해결책 일 수 있습니다.

5

내가 생각하기에 이것은 앞으로 움직일 PHP에 대한 intergral입니다. 주로 .Net 프로그래머이기 때문에, 나는 PHP가 1 백만 개와 1 개의 글로벌 함수로 작동한다는 것을 아쉽다. PHP 5.3에는 네임 스페이스가 있지만, 네임 스페이스를 사용하지 않고 객체 지향적 인 라이브러리가 아니라면 많은 도움이되지 않습니다. 나는 PHP를 언어로 생각하지는 않지만 그들의 API는 끔찍한 혼란을 겪고있다. 아마도 완전한 개편이 필요할 것이다. VB.Net이되었을 때 VB가 통과 한 것과 같은 종류.

+1

동의 함, 그러나 ... 해당 문서는 비교할 수 없습니다. –

+0

나는 이것이 PHP 6의 우선 순위라고 생각합니다. 이제 그들은 향후 5에서 네임 스페이스 지원을 발표하고 있습니다.3 릴리스, 나는 다음 단계가 자신의 표준 라이브러리 함수를 자신의 네임 스페이스/클래스 계층 구조로 옮기기를 바라고 있습니다. – Wilco

+0

우리는 오직 – SeanDowney

6

방식이 너무 많습니다. 누군가 PHP가 OO 기능을 가지고 있다는 것을 발견하자마자 모든 것을 클래스로 감싸고 싶습니다.

PHP의 객체 지향 요소는 사용자가 원하는 방식으로 솔루션을 설계 할 수 있도록 지원합니다. 그러나 Objects에서 기존 함수를 래핑하면 많은 보수가 발생하지 않습니다.

PHP의 핵심이라고 할 수있는 것은 이미 객체 지향적입니다. SPL을보십시오.

+0

SPL이 확실히 올바른 방향으로 나아갈 수 있기를 바랍니다. 필자는 전역 네임 스페이스에서 핵심 기능이 너무 지저분하다고 생각합니다. 내가 언어에 내장되어있는 것과 이름 충돌에 대해 걱정해야한다는 것은 나에게 어리 석다. – Wilco

+0

OO 방식으로 자신 만의 코드를 작성하면 거의 걱정할 필요가 없습니다. 중핵에있는 아무거나와 충돌의 기회가 거의 제로이기 때문에. 그리고 그렇게해도 실패 할 것입니다. 나는 어디에서 왔는지 완전히 알 수있다. PHP에는 그 맛이 없습니다. 파이썬이 더 나은 선택 일 수 있습니다. –

4

동의하지 않습니다. 객체 지향 프로그래밍은 절차 적 프로그래밍보다 본질적으로 더 낫지 않습니다. 나는 당신이 다형성 (상속, 오버라이드 메소드 등)을 필요로하지 않는다면 객체 지향을 사용하지 말아야한다고 믿는다. 객체를 코드의 단순한 컨테이너로 사용하는 것은 오버 헤드의 가치가 없습니다. 이것은 이고 특히 문자열의 참 (배열 키처럼) 때문에 많이 사용됩니다. 모든 응용 프로그램은 일반적으로 일부 다형성 기능을 제외하고는 대개 높은 수준입니다. String 클래스를 확장하고 싶습니까?

또한 약간의 역사가 PHP의 이상한 함수 이름을 이해하는 데 필요합니다. PHP는 표준 C 라이브러리와 POSIX 표준을 기반으로하며 많은 함수 이름 (strstr, getcwd, ldap_open 등)을 사용합니다. 이것은 실제로 언어 바인딩 코드의 양을 최소화하고, 잘 정의 된 기능 세트 (PHP에서 할 수있는 C에 대해 할 수있는 거의 모든 것)를 보장하며 이러한 시스템 라이브러리는 고도로 최적화되어 있습니다 (예 : strchr은 일반적으로 인라인되어있어 약 10 배 빠름).

+0

잘 찍힌다. 오버 헤드의 가치가 있는지 여부는 컨텍스트에 따라 결정됩니다. 우리는 단순화 된 코드에 대한 성능을 항상 희생합니다. 그렇지 않으면 우리 모두는 여전히 어셈블리에서 개발 중입니다. – Wilco

관련 문제