2011-12-24 2 views
4

가능한 중복 : 최근에 나는 지금까지 내가 함수를 사용하여 PHP를 작성했습니다, 객체 지향 접근 방식을 소개했습니다
OOP vs Functional Programming vs Procedural객체 지향 프로그래밍 대 프로 시저 프로그래밍 - 큰 차이점은 무엇입니까?

.

자, 솔직히 나는 그것을 얻지 못합니다. '기능'아이디어를 사용할 때, vars를 포함하여 필요한 모든 기능을 가진 functions.php와 같은 파일을 포함하기 만합니다. , 그리고 그 코드를 사용해야 할 때, 나는 그냥 그것을 호출하고 vars를 설정하거나, 디폴트 vars가 있다면 비워 둡니다.

지금까지 내가 'OO'를 이해하지 못하면 '카테고리'가없는 많은 기능을 작성하는 대신 '클래스'(예 : db로 작업하는 모든 기능은 ' db '클래스) - 그리고 그것들에 vars를주는 대신, 나는 그 클래스들에서 그 vars들을 선행한다고 선언한다.

그래서, 기본적으로 같은 일을하고있는 것처럼 느껴집니다. 나는 바르가 OOP 글로벌 아니라는 것을 알고, 그들은 더 이해-수있는 코드를 만들기위한 OK입니다 예, 당, 그러나 그 외에, 정말 일을에서 큰 차이를 느낄 수 없습니다

$html = new html(); 
$html->src='http://stackoverflow.com'; 
$html->desc='Great place to learn & share knowledge'; 
$html->link(); 

-

html_link('http://stackoverflow.com','Great place to learn & share knowledge'); 

내가 그 코드를 작성하지 않은 사람이 더 많은 읽을 수 있습니다,하지만 큰 혜택 모두에 대해 이야기 볼 수 없습니다 동의 빠르고 등등, 조직, 재사용.

공유 의견을 내가 OOP : 사전에

감사합니다, 에크 혜택을 누릴 수있는 방법 어쩌면 내가 이해하게 될 것입니다.

+3

으로 시작하십시오. "기능적"이라는 뜻은 "절차 적"을 의미합니다. 기능적으로 다소 다른 것입니다 (Lisp을 생각하십시오). –

+0

PHP의 "객체 지향적 인"지원은 여러분이 저에게 묻는다면 크게 고려해야 할 것입니다. 유용하다고 생각되면 사용하십시오. 그러나 언어의 일부가 인공적이거나 생각 나지 않거나 당혹 스럽다고 느낄 때 놀라지 마십시오. –

+2

단순히 클래스를 네임 스페이스로 그룹화하여 함수를 그룹화하는 경우 실제로는 OOP가 아닙니다. – JohnP

답변

0

OOP의 기본 요소는 기능 (메서드)과 데이터 (속성)가 클래스/개체 한 곳에 있다는 것입니다. 함수를 작성할 때만 변수를 사용하면 둘 다 구분됩니다.

주의 : 기능성 프로그래밍은 현재 수행하지 않습니다. 패러다임은 functional programming이며, 루프와 같은 구조는 존재하지 않으며 모든 것은 함수로 표현됩니다.

0

당신이하는 일은 컨텍스트 등을 유지하지 않는 간단한 함수를 작성하는 것이므로 절차 적 프로그래밍이 훨씬 쉽습니다.

정확히 같은 인수를 사용하여 두 개의 함수를 사용하려는 경우 적은 코드가 필요하므로 객체를 사용하는 것이 훨씬 쉽습니다.

아래의 예는 웹 사이트 (SO)가 있고 별도의 페이지에 대한 URL을 작성한다고 가정합니다. 도메인이 변경되면 모든 페이지를 다시 쓰지 않아도되도록 한 곳에서 "기본 위치"를 정의해야합니다.

$url = new URL('http://stackoverflow.com'); 
echo $url -> link('home'); // http://stackoverflow.com/home 
echo $url -> link('review'); // http://stackoverflow.com/review 

기능 것을 수행 :

echo linkURL('http://stackoverflow.com', 'home'); 
echo linkURL('http://stackoverflow.com', 'review'); 

당신이 볼 수 있듯이, 당신도 기능을 사용하여 귀찮게하지 않을 수 있습니다.

는이에 사전 OO 접근법있다 : 여전히 문맥을하면서

$context = prepareURL('http://stackoverflow.com'); // returns <something> 
echo createURL($context, 'home'); 
echo createURL($context, 'review'); 

이 방법은 함수를 사용합니다. 그러나 눈치 챘을 지 모르겠지만 이것은 OO에 매우 가깝습니다.

2

다형성을 읽습니다. 일단 당신이 이것을 이해한다면 당신은 그곳에 중도에 있습니다. 클래스는 단순한 함수의 집합 (예를 들어 말하는 방법) 이상이며, 클래스의 인스턴스는 상태와 동작을 캡슐화합니다. 당신은 또한 oo 패러다임의 힘을 완전히 실현하기 위해 디자인 패턴을 연구해야합니다. 넷 (http://en.m.wikipedia.org/wiki/Design_Patterns)의 갱뿐만 아니라 기업 패턴 (http://martinfowler.com/articles/enterprisePatterns.html)

관련 문제