2010-01-23 5 views
17

객체 지향 프로그래밍이 좋은지 아닌지에 대한 많은 논쟁이 있습니다. 그러나 PHP에서 OOP를 사용하는 것이 더 느립니다. 프로 시저 프로그래밍과 더 빠른 속도와 더 느린 속도의 OOP를 사용하는 것이 좋은 거래일까요? (페이지가로드 될 때마다 수업을 시작해야하고 큰 웹 사이트는 느려지 기 시작합니다.)OOP는 PHP에서 사용할 가치가 있습니까?

더 중요한 것은, 클래스 내에 물건을 포장하고 정적 함수를 사용하는 것이 좋을까요 아니면 ex : wp_function() 접두사가있는 많은 거짓 기능을 갖는 것이 더 낫겠습니까.

+20

은 뇌 세포의 가치가있는 처리의 마이크로 초입니까? CakePHP 또는 CodeIgniter와 같은 소스를 연 다음 WordPress 소스와 비교하여 후자가 키보드로 얼굴을 부숴 버리지 않도록하십시오. – seanmonstar

+5

당신이 옳습니다. 인생은 너무 짧아 요청 ​​당 50 밀리 초의 최적화를 시도하고 최적화 할 수 없습니다. – ambiguousmouse

+0

@seanmonstar : Wordpress는 OO가 아닙니다. ** o_O '** –

답변

10

예, 거의 항상 OOP를 사용하는 것이 좋습니다. 이는 OOP가 코딩 스타일이기 때문에 대부분의 코딩 스타일이 언어 간을 쉽게 전달할 수 있기 때문입니다.

사람들은 특정 언어를 사용하기 때문에 코딩 스타일을 사용하지 않습니다. 사람들은 코딩 스타일을 사용합니다. 왜냐하면 코딩 스타일이 바람직하다고 느끼는 것을하기위한 좋은 방법을 제공하기 때문입니다. 따라서 기본 요소 (상속, 클래스 속성 등)가있는 한 해당 코딩 스타일로 작성하는 것이 항상 실용적입니다.

아니요, 절차 적 함수를 사용하여 액세스하는 것은 좋지 않습니다. 이는 상태를 유지하기 위해 이와 같은 조치를 취해야하기 때문입니다.

function myFunc() 
{ 
    global $class; 
    $class->doMethod(); 
} 

function myFunc2() 
{ 
    global $class; 
    $class->doMethod2(); 
} 

이것은 전체적인 상태 톤을 생성하므로 좋지 않은 생각입니다.

+0

항상 전역 함수를 사용하는 것은 많은 공간을 차지하므로 나쁜 생각입니다. 하지만 $ GLOBALS [ 'class']를 사용하는 것이 좋을까요? 쓸 시간은 더 길지 만 수업을 한 번만 사용했다면 사용하는 것이 좋습니다. – ambiguousmouse

+3

'$ GLOBALS'는 기본적으로 같은 것입니다. 전역 변수를 작성 중입니다. –

+0

그래서 $ GLOBALS [ 'class'] 만 사용할 수 있습니다. 그럼 다른 줄에 그냥 $ class를 사용합니까? – ambiguousmouse

12

OO를 PHP와 함께 사용하는 것에 대해 걱정할만한 이유가 있다면, 두려워하지 마십시오. PHP는 느린 언어입니다. 객체를 사용하여 속도가 느려지는 정도의 프로세서 집약적 인 작업을한다면 PHP를 전혀 사용하지 않아야합니다.

정적 함수와 관련하여 이것은 설계 선택 사항이지만 정적 함수로 완전히 구성된 클래스는 피하는 편이 잘못되었습니다. 접두어에 비해 장점이 없으며 단지 개념이 좋지 않기 때문에 구조를 사용하는 것이 좋습니다.

2

네 애플리케이션이 커질수록 그렇습니다. (그리고 그렇게 될 것입니다.) 많은 좌절감을 줄 것입니다. 그리고 자신을 반복 (장소에 붙여 넣기 코드를 복사) .. :)

+0

허. 왜 OOP를 사용하여 copy + paste-coding을 암시하지 않습니까? –

+0

절차 적 프로그래밍을 재사용 할 수 없습니다. 당신도 OOP에서이 실수를 할 수는 있지만 : – Chris

+0

왜 재사용 할 수 없습니까? 매우 일반적인 절차 코드를 작성할 수 있습니다. C++ 표준 라이브러리 (예 :'std :: sort'), C 표준 라이브러리 (가장 눈에 띄는 것은'qsort')를 보라. 절차상의 코드를 재사용 할 수 없다는 것은 모든 기능을 한 번만 사용할 수 있다는 것을 의미합니다. –

5

내 겸손한 의견으로는 PHP 개발자 한 방향으로하려고 시도해서는 안됩니다. (절차 적 대 객체 지향적) 어떤 경우에는 필요한 전역 함수가 몇 가지 있으며, 객체를 사용하면 더 많은 이점이 있습니다. 모든 것을 강요하거나 유연하게하려고하지 말고 각 상황에 가장 적합한 것을 사용하십시오.

5

나는 Chacha102의 대답에 강력히 동의하지 않습니다.

이 질문에 대한 적절한 대답은 여러 권의 책을 채울 것입니다. 여기에는 20 줄의 게시물이 없습니다.

두 가지 방법 모두 장점과 단점이 있습니다. 나는 좋은 프로그래머가 절차 적, 비 절차 적, 객체 지향 프로그래밍에 대해 상당한 경험을 갖고 있다고 생각하는 사람을 추천한다. SCRUM, 캐스케이드 및 RAD와 같은 다양한 방법론을 경험할 수 있습니다.

OO와 프로 시저 코딩에 대한 PHP의 적합성과 관련하여 확실히 언어의 근원은 후자입니다 (단, Java와 ASP는 실제 OO 언어가 아닌 하이브리드입니다).

Peronally 나는 매우 단순하거나 무언가를 만들어야 할 때 절차 적 코드를 쓰는 경향이 있거나, 그 행동을 정의되고 예측할 수 있어야합니다. 그러나 런타임에 동작이 크게 달라지는 복잡한 코드를 작성하면 유한 사용 사례의 기반을 기반으로 한 디자인에도 불구하고 OO가 개발자의 시간면에서 훨씬 효율적이라는 것을 알게되었습니다.

은 OO 코드보다 더 빨리 실행하기 때문에 당신은 항상 절차 적 코드를 작성해야한다고 주장하려면 완전히 하드웨어 비용 대 개발 시간의 상대적 비용을 무시) 이 사실 필요는 없다)

1

는이 클래스 내에 물건을 포장 및 네임 스페이스가 PHP에서 사용할 수있는 점을 감안 정적 함수

를 사용하는 것이 좋은 것, 이것은 네임 스페이스 (COL)를 피하기 위해 정말 지저분한 방법입니다 나는 추천할만한 것이 아닙니다.

는 C. 성능에 대한

5

같은 인수 목적 C 다시 하루에 C++에 대해 하였다. 그리고 그 문제에 대한 해답은 가용 메모리와 처리 능력을 지속적으로 더 커지고 더 좋아지고 더 빠르게 활용하는 것이 었습니다.

예, OO를 실행하려면 더 많은 리소스가 필요합니다. 그러나 OO 사용의 이점은 OO 응용 프로그램을 지원하는 데 드는 하드웨어 비용 $$ (중요하지 않음)보다 큽니다.

그러나 소프트웨어 성능에 대해 염려하는 것이 좋습니다. 그러나 절차를 시작하기위한 절차와 대다수의 절차를 살펴 보는 것은 약간 잘못된 것입니다. 절차 적 또는 OO 적 (그리고 둘 다 관련이 있는지)에 관계없이 효율적인 코드 작성에 중점을 둘 필요가 있습니다.

PHP가 인터넷에서 가장 많은 트래픽을 발생시키는 웹 사이트 중 일부, 즉 Facebook에 전원을 공급하는 데 PHP가 가장 빠른 플랫폼이 아닐지라도 (Java는 예를 들어 엉덩이를 걷어차기를 권장합니다.)

PHP 및 OO에 대한 다른 의문이 있으면 Zend와 Magento (Zend 기반)를 살펴보십시오. Magento는 VERY 리소스 집약적 플랫폼이므로 메모리 사용량이 인스턴스 당 36MB 이상일 수 있습니다. 그러나 플랫폼 자체는 수백만 건의 조회를 처리 할 수 ​​있습니다. 하드웨어 자원을 적절하게 제공하는 적절하게 구성된 서버 환경이 OO 사용의 모든 이점을 서버 자체의 비용보다 훨씬 높게하기 때문입니다. 그러나 클러스터 컴퓨터의 세계에서 처리 능력과 메모리 (책임감있게)를 사용하지 않는 것은 - IMHO - 임상 적 정신 이상입니다.

3

아주 많은 알려지지 않은 변수에 의존하기 때문에 실제로 완벽한 답이 없습니다. 그런 다음 모든 것이나 전부가 될 필요는 없습니다.

예를 들어, 응용 프로그램을 MVC 모델로 분리하면 모델을 OO로 만들지 만 컨트롤러를보다 단순하게 절차 적으로 유지할 수 있습니다.

클래스를 공용 정적 함수를 단순히 그룹화하는 수단으로 사용하거나 활성 레코드 패턴으로 훨씬 더 멀리 가져갈 수 있습니다.

이메일에서 POST를 실행하는 작은 단일 페이지 웹 폼을 작성하는 경우 실제로 활용할 기존 메일 클래스를 포함하지 않도록 OO가 필요하지 않습니다.

아무도 당신이하고있는 프로젝트를 이해하지 않고 적절한 조언을 줄 수는 없습니다.

그렇다면 속도가 유일한 것이라면 OO 이 약간 느려질 것입니다. 그리고 OO 이득의 일부를 모방하기 위해 절차적인 PHP에서도 할 수있는 비열한 것들이 많이 있습니다. 하지만 거대한 프로젝트를 수행하지 않는 한 추가 된 오버 헤드는 결코 큰 액수가 아닙니다. 그리고 거대한 프로젝트가있을 때에는 OO 전문가들이 오버 헤드의 단점보다 중요 할 수 있습니다.

2

내가 궁금해했다. 불행히도 절차 코드에서 oop로 코드를 변경 한 후에는 미리 벤치 마크를 실행했지만 사전에 실행하지 않았습니다.

다음은 벤치 마크 코드입니다.

class game{ 
    function maxp($val){ 
    return max(0,pow($val,0.5));   
    } 
} 

$game = new game; 

for($i=0;$i<100000;$i++){ 
    $game->maxp(100); 
    //game::maxp(100); 
} 

OOP 결과는 0.13 내지 0.2 초 범위이고;

절차 결과는 0.08 초에서 0.1 초 사이의 범위였습니다.

결과는 좋은 시간 동안 일관되게 유지되었습니다.

나는 당신 자신의 테스트를 실행하는 것이 좋습니다.

php 5.4.3