2010-04-04 4 views
10

누군가는 당신의 PHP 코드와 애플리케이션이 전역 변수를 사용할 때 스파게티 코드 여야한다고 말했습니다 (저는 이것을 가정합니다). 나는 WordPress를 많이 사용한다. 내가 아는 한, 그것은 훌륭한 PHP 소프트웨어 근처에서 가장 좋은 것입니다. 또한 많은 전역 변수를 사용하여 해당 구성 요소 간의 상호 작용을 수행합니다.스파게티 코드의 특성은 무엇입니까?

솔직히 말해서, 그게 내가 아는 유일한 것 때문에. 그래서 완전히 편향된 것입니다. D

그래서 궁금 해서요. 스파게티 코드의 특징은 무엇입니까?

추 신 : 내가 아는 유일한 것은 워드 프레스입니다. 그래서, 아마도 이것은 누군가가 PHP (예 : Stack Overflow 웹 사이트)에서 전체 웹 응용 프로그램을 개발 한 경험이 거의없는 사람에게 큰 도움이 될 것입니다.

+1

'전역 변수 '는 무엇을 의미합니까? –

+0

이 코멘트는 http://stackoverflow.com/questions/2571474/isset-and-php-global-variable에 있습니다. – justjoe

+16

Wordpress는 주류에 PHP 프로그래밍의 ** 최악의 ** 예 중 하나이며, 주류는 이유는 글로벌 변수에 지나치게 의존하고 있기 때문입니다. 그것 때문에 보안에 대한 끔찍한 평판을 얻습니다. 나는 그것이 나쁜 이유의 예를 게시 할 것이지만, 나는 그것에 대해 긴 호언 장담을 이미 썼다. (http://www.phpvs.net/2009/12/08/an-exercise-in-wordpress-integration-or-why- wordpress-sucks /). PHP 웹 애플리케이션 구축 경험을 얻으려면 Zend, Symfony 또는 CodeIgniter와 같은 PHP 프레임 워크를 살펴 보는 것이 좋습니다. – zombat

답변

17
  • 없음 모듈화 (언어가 모듈화를 제공하기 위해 사용하는 어떤 하나 개의 파일, 클래스, 모듈, 네임 스페이스, 패키지에 모든 것을, 나), goto 년대의
  • 티,
  • 빈약 한 조직,
  • 기능과 목적을 분명히 구분하지 않습니다. (즉, 모든 것을 포함하는 클래스 또는 함수)
  • 긴 함수.
  • 이름이 잘못되었습니다.
  • 전체적으로 일관된 코딩 스타일이 없습니다.
  • 구현과 코드 클라이언트간에 명확한 인터페이스 계약이 없습니다. (즉, 함수의 입력, 출력, 사전 및 사후 조건이 무엇인지에 대한 지정이 없음)
  • 추상화가 거의없는 데이터 구조의 내부에 지나치게 의존합니다.
  • 함수는 문서에서 아무런 언급없이 전역 상태를 임의로 순열/수정합니다.
  • 평범하지 않은 코드에 대한 설명이나 문서가 부족합니다.
  • 코드가 필요 이상으로 복잡합니다.
  • 재사용 부족. (중복 된 코드가 많음, a.k.a. copypasta)
  • 믿을 만하다는 검증 또는 단위 테스트 없음.
  • 매직 넘버. 본질적으로

, 디자인, 사전의 고려의 부족과 함께 때렸다 해킹 단지 뒤범벅. 이것은 PHP뿐만 아니라 모든 언어에 적용됩니다. 그냥 참고로 PHP (예를 들어, 스택 오버플로 웹 사이트)

에서 전체 웹 애플리케이션 개발에 약간의 경험을 가지고 있지만 스택 오버플로가 PHP로 개발되지 않은 사람에 대한

.

+0

@alex : 무엇? 나는이 세상의 모든 웹이 PHP를 사용하여 개발한다고 가정한다. D – justjoe

+2

우리는 그 중 하나를 찾지 못했다고 생각한다! –

7

글쎄, 당신이 게시 한 의견의 이야기, 설명은 매우 간단합니다. global 연산자를 사용하면 스파게티 국수의 다른 끝처럼 변수의 소스를 알 수 없습니다. 그것은 어디에서나 정의 될 수 있습니다. 따라서 함수를 호출 할 때이 변수에 어떤 값이 있는지 알 수 없습니다.변수를 직접 전달하는 대신 변수를 직접 전달하여 명확하고 명확하게 만듭니다.

function hello_testing($conditional_random) { 
    if ($conditional_random)) { 
     echo "foo is inside"; 
    } 
} 

P.S. http://en.wikipedia.org/wiki/Spaghetti_code

+2

음 .. 소스가 알려지지 않았지만 제대로 캡슐화되지 않았습니다. 글로벌 공간에 모든 것을 던지기 시작하면 이름 충돌 및 기타 문제가 발생하기 시작합니다. – mpen

5

스파게티 코드는 일반 가난한 코드와 구별되는 특정 특성을 가지고 있습니다. 스파게티는 매우 복잡하고 구조가 복잡하기 때문에 프로그램을 통한 과정의 흐름을 따라 가기가 어렵습니다. 그것은 볼그니우스의 그릇에 국수를 푸는 것을 시도 같이 같이이다.

이 문맥에서는 GOTO 문이 자주 인용됩니다. GOTO 문은 제어를 코드베이스의 임의의 다른 위치로 제어를 이전합니다. 대부분의 프로그래밍 언어에는 goto 스타일 동작을 시뮬레이트하기 위해 남용 될 수있는 명령이 있습니다. 예를 들어 예외를 사용하여 오류를 처리하는 대신 일반적인 비즈니스 논리를 구현할 수 있습니다.

전역 변수는 스파게티 코드에 기여합니다. 그 이유는 값이 현재 프로그램 단위의 범위 밖에 할당되기 때문입니다. 이것은 코드베이스에서 변수가 주어진 값으로 설정되는 위치를 결정하기 어렵게 만들 수 있습니다.

덧붙여 goto 문을 사용한다고해서 프로그램이 스파게티가되는 것은 아닙니다. goto을 사용하여 명확하고 잘 구조화 된 코드를 작성하는 것이 완벽하게 가능합니다. 융통성을 남용하지 않기 위해 많은 자기 관리가 필요합니다. 현대 프로그래밍 언어는 불필요하고 바람직하지 않은 사용법이되었습니다.

1

WordPress은 내가 본 스파게티 코드 중 가장 큰 조각입니다. PHP, HTML, JavaScript 및 모든 것들을 동일한 파일에 모두 묶어 두는 놀라운 기능이 있습니다. 스파게티 코드의 또 다른 예를 보려면 osCommerce 또는 Zen Cart을보십시오.

사실 오픈 소스 PHP 응용 프로그램의 대다수가 PHP로 프로그래밍하는 방법에 대한 충격적인 예입니다. 좋은 구조적 예제 (스파게티가 아닌)를보고 싶다면 Yii 프레임 워크 또는 Zend Framework을보십시오. CodeIgniterKohana과 같은 프레임 워크는 스파게티가 아니지만 PHP 5에서 구조화하는 방법의 좋은 예는 아닙니다. PHP 5에서 사용하기 위해 더 나은 방법이 없었기 때문에 PHP 4에서 사용 된 많은 기능을 사용하기 때문입니다 (예를 들어 , 실제 객체 상속 대신 경로 기반 상속 사용).

절차 적 프로그래밍에 대한 합리적인 좋은 예가 필요하다면 Drupal을보십시오. 복잡성 때문에 PHP 애플리케이션이 가장 좋지 않을 수도 있지만 WordPress를 능가하며 많은 작업을 수행 할 수 있습니다.

+0

하지만 Kohana는 PHP5 용으로 설계되었으므로 PHP5 용으로 구조화되지 않은 것에 대해 반박하는 날이 왔습니다. 워드 프레스는 MVC가 아니지만 실망 스럽다. 그렇다. 이상하게도 커스터마이징과 리메이크가 쉽기 때문에 놀라운 일이다. 그것은 드루팔 (Drupal보다 Alexa 히트 곡이 많은 이유 중 하나입니다. 감히 말할 수 있습니다. 의심의 여지없이 드루팔 (Drupal)은 이러한 것들을 처음 접하는 사람이라면 워드 프레스 (WordPress)보다 리메이크하고 커스터마이징하기가 더 어렵습니다. 나는 둘 다하고, Drupal로 시작했다. Kohana에 대한 잘못된 정보는 – Volomike

+0

-1입니다. 이 프레임 워크는 구조, 코딩 스타일 등에서 가장 좋은 PHP 예제 중 하나입니다. 처음에는 코드 이그니 저는 (Code Igniter)를 기반으로했지만 지금은 완전히 다릅니다. –

관련 문제