PHP 코드 리팩터링 도구


68

PHP 코드 리팩터링 (변수 이름 바꾸기, 메소드 추출, 메소드 참조 찾기 ...)이 가능한 도구가 있습니까? 고맙습니다.

+3

역동적 인 언어로 신뢰할 수있는 리팩토링을하는 것이 어렵다고 생각합니다. 10 dec. 102010-12-10 09:40:36

+2

네,하지만 실제 문제는 여기에 좋은 인프라 (파싱, 정적 분석, 변환)를 사용하지 않는다는 것입니다. 도구를 만드는 것. 기초가 단단 할 때까지, 집을 짓는 것을 시도에있는 어떤 점도 거의 없다. 28 aug. 122012-08-28 02:37:55

  0

기초가 강해졌습니다. http://stackoverflow.com/a/21400723/120163 참조. 28 jan. 142014-01-28 10:31:18

  0

늦은 2017 AST 리팩토링 도구에서 작업 한 것을 봤습니다. 책임자 : https://github.com/RectorPHP 16 oct. 172017-10-16 16:40:20

0

Eclipse 용 PDT는 (내가 아는) 몇 가지 기본 리팩터링을 지원합니다. 클래스의 이름을 변경하고 참조 될 때 자동으로 클래스 이름을 바꿀 수 있습니다. 파일을 이동하고 포함/요구 참조도 변경 될 수 있다고 생각합니다.

  0

이 글을 쓰던 시점에 나는 PDT의 진실. 16 may. 122012-05-16 14:22:52

  0

아니요, 현재 없습니다. 이것은 PDT의 주된 약점입니다. (그러나 다음 릴리스에서 일부 변경 될 것입니다.) 22 jul. 142014-07-22 03:36:15


3

아마도 리팩토링 개념에 익숙해 진 것 같아요. 도구를 사용하는 것이 좋지 않을 수도 있습니다.

저는 리팩토링을 수동으로 수행하는 편이 더 좋습니다. 왜냐하면 속도가 느려지고 실제로 돌아 다니는 이유와 이유에 대해 실제로 생각하기 때문입니다.

+3

리팩토링으로 인해 속도가 느려지지 않아야합니다. 리팩토링은 개발 과정에서 빠르고 자신감이 있어야합니다. 리팩토링에 대한 추가주의가 필요한 경우, 23 nov. 102010-11-23 11:21:46

  0

마크와 동의합니다 - 나는 리팩토링의 주요 판매 포인트를 얻지 못합니다 : "이것은 어떤 프로그래머라도 받아 들일 만하고 이해할 수있는 형식으로 코드를 가져옵니다. "그러나 우리는 모두 다르다. 내게 쉬운 일은 다른 누군가에게 힘들 수도 있고, 내 코드를 다른 사람을 위해 리팩터링한다면, 내가 따르기가 쉽지 않을 수도있다. 그래서 요점은 무엇인가? 07 jan. 112011-01-07 19:12:29

  0

나는 동의하지 않는다. 리팩토링은 "모든 프로그래머가 받아 들일 만하고 이해할 수있는 형식으로 코드를 가져 오는 것"입니다. 가장 간단한 예로 메서드 이름을 바꾸는 것이 좋지만 메서드 이름이 좋지 않으면 쉽게 향상시킬 수 있습니다. 변경 사항은 다른 사람에게 영향을 미치지 않습니다. 분명히, 다른 사람이 사용할 수있는 항아리를 제공하는 경우 공개 메서드의 이름을 바꾸지 않고 새 메서드를 만들고 이전 메서드를 사용하지 않는 것이 좋습니다. 그러나이 경우에도 내부 코드가 더 나은 명명 된 함수를 호출하도록 리팩토링 할 수 있습니다. 16 mar. 112011-03-16 23:08:30

  0

리팩토링이 자신감을 가져야한다는 것은 사실이지만 구조를 변경하고 기능을 변경하지 않으므로 수동 리팩터링을 사용하면 확실히 느려지 게됩니다. 시카고에있는 에세이를 옥스포드 스타일로 변환하는 것과 같습니다 (항상 좋은 생각입니다). 텍스트의 의미를 바꾸지는 않지만 구문을 변경하는 중이고 빗질 과정에서 (a) 리팩터링이 불필요하거나 (b) 정리해야 할 다른 사항을 발견 할 수 있습니다. 나는 그것이 좋은 운동이라고 생각합니다. 17 feb. 162016-02-17 17:09:28


5

NetBeans IDE에는 몇 가지 리팩토링 기능이 있지만 항상 작동하는 것은 아닙니다. 그러나 초기 PHP 액세스로 6.1을 사용하고 있습니다. 필자는 PHP 6.5에서 리팩터링 기능이 향상 될 것으로 기대합니다.

  0

Netbeans 6.5를 사용하면 메서드 이름을 바꾸는 등의 작업을 할 수 있지만 같은 프로젝트의 파일에서도 다른 파일의 참조가 수정되지 않으므로 대부분 쓸모 없게됩니다. 25 dec. 082008-12-25 14:49:54

  0

Netbeans 6.7을 사용하고 있는데, 다소 효과가 있습니다 ... 29 oct. 092009-10-29 17:20:13

  0

6.9.1을 사용하고 있으며 리팩터링 기능이 여전히 PHP 케이스의 문자열 찾기/바꾸기로 제한되어 있다고 생각합니다. 동적 언어의 경우 리팩토링 기능이 항상 제한적입니다. 클래스 이름을 마우스 오른쪽 단추로 클릭하고 모든 컨텍스트에서 다른 이름으로 바꿀 수는 없습니다. 08 apr. 112011-04-08 08:58:50

  0

Netbeans 7.2 (/ 3) 리팩토링을 사용하면 대부분 매력적으로 작동합니다. 다른 컨텍스트에서 클래스/메서드/변수의 이름을 변경합니다. 30 mar. 132013-03-30 18:39:11


1

Netbeans 6.5에서 PHP에 대한 리펙토링 지원은 없지만 향후 버전에서 제공 될 예정입니다.

PDT eclipse plugin은 리팩터링도 지원하지 않습니다.

Aptana는 리팩토링을 지원하지 않습니다. 나도 일하러 고토 정의를 얻을 수 없었다.

검색을 사용하여 현재 대체합니다. 저도 최소한 기능 지원의 이름을 변경하고 싶습니다.


11

rephactor은 자동 리팩토링 도구입니다. 아직 조금 불완전하지만 기본적인 리팩터링이 있습니다.

그렇지 않으면 좋은 테스트 스위트가 실제로 리팩토링을위한 최상의 도구 일 수 있습니다.

+14

이것은 정규식을 사용하여 코드를 찾습니다. 단순히 안전하지 않습니다. 04 sep. 092009-09-04 05:13:37

+5

자동 리팩토링은 절대로 없습니다. 작업을 확인하기 전후에 테스트가 있어야합니다. Rephactor는 실제로 이전/이후의 테스트 흐름을 통합합니다. 05 sep. 092009-09-05 13:39:47

+6

@troelskn : 절대? 리팩토링 도구를 프로그램에 손상을주는 방식으로 구현해야하는 이유는 무엇입니까? 이는 진정으로 나쁜 리팩토링 도구라는 것을 의미합니다. 대부분의 리팩터링을 올바르게 수행하는 것은 기술적으로 간단합니다. 그것은 많은 엔지니어링 땀을 흘리고 있습니다. 그리고 대부분의 사람들은 그것을 지불하기를 원하지 않습니다. 그리고 그것은 왜 저기에있는 재료가 일반적으로 꽤 나쁜지를 설명합니다. 그렇다고해서 리팩토링 도구가 손상되지는 않습니다. 01 sep. 102010-09-01 03:37:31

  0

코드 기반을 변경하면 오류가 발생할 위험이 있습니다. 01 sep. 102010-09-01 10:18:34

+5

@troelskn : 일반적으로는 아닙니다. 동적 인 언어를 사용하면 네임 구현 바인딩은 런타임에 수행됩니다. Haskell이나 C++ 같은 정적 언어 (컴파일시// 코드가 실행될 때 이름 구현 바인딩이 수행됨)는 리팩토링을 보장 할 수 있습니다 성공한. 이것이 역동적 인 언어가 일반적으로 싫어하는 이유입니다. 28 oct. 102010-10-28 06:33:50

  0

@Jesse : JS에 대해 싫어하는 것이 하나 있습니다. 쉬운 리팩터링을 허용하지 않는 느슨한 유형입니다. 그렇지 않으면 매우 좋습니다. @troelskn : RegEx 기반의 리펙토링 툴이 어떻게 제대로 작동 할 수 있다고 생각하는지 모르겠습니다. Intellij Idea는 Intellij가 전체 코드에 액세스 할 수있는 한 모든 리팩터링이 안전하며 코드 동작을 변경하지 않는다는 것을 보증합니다. http://www.jetbrains.com/idea/features/refactoring.html 16 mar. 112011-03-16 23:00:44

  0

@jesse 이는 언어의 속성이지 리팩토링 도구가 아닙니다. 26 mar. 112011-03-26 14:19:21

  0

@JuanMendes #jetbrains #advertising #detected 22 jul. 142014-07-22 03:33:12

  0

@gaRex? 그것은 분명히 질문과 관련이 있습니다 22 jul. 142014-07-22 03:41:12

  0

테스트에 대한 의견에 완전히 동의합니다. 최근에 refactoring PHP에 대한 블로그 글을 썼습니다. 실제로 코드를 변경하기 전에 릴리스 트레인 정렬 및 훌륭한 테스트를 받고 있습니다. https://icyapril.com /programming/php/2016/12/24/refactoring-legacy-php.html#testing 30 dec. 162016-12-30 05:21:52


2

아직도 내가 좋아하는 리펙토링 도구는 의 초고속 파일 검색과 결합하여 좋은 'EditPlus입니다. (힌트 : Alt + F7) Mark Biek의 답변에 동의합니다. 어디서 언제 교체되는 것을 완전히 제어하고 싶습니다.

내가 리팩터링을해야 할 때마다 기본 기능을 사용하여 검색하려는 파일의 총 사령관에게 목록을 작성하거나 선택하여 편집 지점으로 드래그합니다.

에디트 플러스는 & 모두 일반 텍스트 매칭, 정규식 매칭 또는 여러 줄 일치를 사용하여 파일을 열어 현재 파일, 선택 또는 을 통해 교체를 검색 할 수 있습니다.

또한 코드 리팩토링에 편리한 기능은 EditPlus의 매크로 레코더입니다 (Ctrl + Q는 매크로 1-9 기록을 시작하고 Alt + 1-9는 매크로 재생).

일단 코드가 중단되면 코드를 통해 변수, Ctrl + Shift + (홈 || 끝 || 화살표 키)를 검색하고, 삭제하고, 복사/붙여 넣기하고, 해당 키보드를 사용할 수 있습니다. 예를 들어, CSV 파일을 30 초 이내에 여러 SQL 쿼리로 변환 할 수 있습니다.

+11

이것은 리팩토링이 아닙니다. 그것의 바로 편집. 04 sep. 092009-09-04 05:11:20

+2

리펙토링은 자동 편집입니다. 11 mar. 102010-03-11 02:03:08

+6

@quotlibetor : 베토벤의 다섯 번째 작문은 정의에 따라 편집하는 중입니다. 리팩토링 (의미 론적으로 합법적 인 방식으로 잘 정의 된 코드 청크를 움직이는 것)과 두 용어 사이의 구분을 지울 수 없다는 의미를 알지 못하는 임의의 청크를 옮기는 것보다는 질적으로 다른 점이 다릅니다. 01 sep. 102010-09-01 03:40:21


0

필자가 아는 한, PHP에 대한 중요한 리팩터링 지원을 가진 유일한 IDE는 PHP 및 Eclipse PHP 플러그인 제조업체의 Zend Studio입니다. 기능은 매우 기본이지만. 내가 아는 어떤 것도 Resharper for C#과 같은 제품의 기능을 가지고 있지 않습니다.


1

PHP for Delphi for PHP는 2009 년 초 출시 될 코드 명 악어 코드 릴리스에서 리팩토링 기능을 사용할 것이라고 읽었습니다. 자세한 내용은 this link을 참조하십시오.


3

개인적으로는 PHPEclipse IDE를 기본 개발 도구로 사용합니다. 그러나 나는 리팩터링을하는 "프로젝트의 모든 곳을 대체하라"라는 기본적인 내용을 정말로 놓친다.

find . -type f -name "*Controller.php" -print0 \ 
     | xargs -0 sed -i 's/string1/string2/g' 

그래서, 지능적으로 참조를 찾을 수있는이를 사용하여 이름을 변경, 제거하고 소스 코드 조작의 모든 종류를 만들 :

그러나 아주 간단한 은/ 명령을 쉽게 해결할 수 나오지도 찾을 수 있습니다.

BTW :이 매개 변수와 속성을 모두 기억할 수는 없으므로 한 번 입력 한 다음 reverse-i-search을 통해 호출하십시오.

희망이 도움이됩니다. 젠드 스튜디오 조금 리팩토링 할 수

+2

sed 명령으로주의를 기울이십시오 : 변수를 리펙토링 할 때 당신은 종종 특정 대회에서 특정 대회에서 심판을 제한하기를 원한다. 변수 $ data를 클래스에 넣을 수는 있지만 _dataRead() 함수에서만 이름을 변경할 수 있습니다. 이를 수행하는 기능은 간단한 sed 명령과 IDE 플러그인의 차이점을 설정합니다. 05 oct. 112011-10-05 11:09:25


2

.....


13

Scisr는 PHP에 대한 간단한 독립형 리팩토링 도구입니다.

이 질문은 오래된 질문이지만, PHP 리팩토링 도구의 가장 좋은 점 중 하나이기 때문에 필자는 새 프로젝트를 목록에 추가 할 것이라고 생각했습니다.

여기에 언급 된 다른 항목의 부족함으로 인해 많은 디자인 목표가 발생했습니다. 특정 IDE에 묶여 있거나 테스트 관행을 지시하거나 전체 수동 노동을 필요로합니다. Scisr에서 전반적으로 더 나은 경험을 얻기를 희망합니다. 설치 및 실행이 간단합니다. 영리하려고 시도하지만 영리하지 않습니다. 자동화 작업에 최선을 다하는 것을 발견했습니다. 즐겨!

  0

방금 ​​프로젝트 홈 페이지를 읽었습니다. 나는이 프로젝트의 배후에있는 방법에 전적으로 동의하며 그것이 잘되기를 바란다. (PC에서 개발 중이므로 불행히도 우분투로 옮길 때까지 기다려야합니다.) 14 oct. 102010-10-14 06:32:48

  0

당신이 좋아하는 것을 기쁘게 생각합니다! 해킹을하고 싶다고 느낀다면 Windows 환경에서 실행하기가 너무 어려워서는 안됩니다. 내 생각 엔 파일 경로가 유일한 진짜 문제 일 것이고, 그 중 많은 부분은 CodeSniffer에서 코드화 한 코드에 의해 처리됩니다. CodeSniffer는 Windows를 지원한다고 생각합니다. 15 oct. 102010-10-15 19:09:30

  0

링크가 끊어졌습니다. - https://github.com/iangreenleaf/Scisr 17 aug. 112011-08-17 18:45:32

  0

@ Walter-Mundt - 감사합니다. 나는 내 github 사용자 이름을 잠시 바꿔서 망가 뜨 렸습니다. 이제 해결되었습니다. 21 aug. 112011-08-21 07:09:38


1

IntelliJ에서 Web IDE를 사용해보십시오. 이제는 EAP 단계 (알파/베타)에 있지만 몇 달 동안 유일한 IDE로 사용하기 때문에 안정적이고 매우 좋습니다.

  0

필자는 또한 PHPStorm을 사용합니다. 이름 바꾸기/이동, 변수 소개, 상수 소개, 상수, 인라인, 안전한 삭제 기능 소개 등 매우 기본적인 리팩토링 지원 기능이 있습니다. 16 mar. 112011-03-16 23:11:31


1

리팩토링 엔진이 실제로 작동하는 것을 볼 수있는 Delphi for PHP의 다음 릴리스에 대한 기사를 게시했습니다. JetBrains의 지원 리팩토링에서

http://blogs.embarcadero.com/joseleon/2010/06/09/delphi-for-php-next-release-early-preview-15-refactoring/


8

PHPStorm, 이름 바꾸기 리팩토링 파일, 함수, 상수, 클래스, 속성, 메서드, 매개 변수 및 로컬 및 글로벌 변수를 작동 http://www.jetbrains.com/phpstorm/index.html

.

  • 이 변수
  • 상수

  • 인라인 변수 필드를 소개 소개 소개하고 그들은뿐만 아니라 소스 프로젝트를 엽니 일부 무료 라이센스를 제공합니다 또한 다음과 같은 리팩토링을 사용할 수 있습니다!

  • +2

    실제로이 IDE는 리팩터링을 지원합니다. 불행히도, 일부 유용성 문제가 있습니다. 나는 그들이 곧 고쳐지기를 바라고있다. 예를 들어, 선택 영역에서 찾기/바꾸기를 수행하면 편집기 창에서 "모두 바꾸기"가 시작됩니다. 일반적으로 이름 바꾸기를 지원하는 경우 Aptana를 마음에두고 선택할 수 있지만 일반적으로 좋아하고 사용합니다. 그것 안에 멋진 30 sep. 112011-09-30 00:01:57

      0

    지만, 유용성 정말 이클립스/netbeans에 비해 짜증. 예를 들어 검색/대체 및 팀 도구와 같은 기본 기능. 22 jul. 142014-07-22 03:34:53


    4

    https://github.com/QafooLabs/php-refactoring-browser

    PHP의 리팩토링 브라우저는 최근이 the good book에 설명 된 리팩토링 브라우저에 걸릴 수 있습니다. 도움이 될 수 있지만 (기여 해주십시오), 몇 가지 일반적인 리팩토링을 지원합니다. 글을 쓰는

    는, 브라우저는 지원

    • 추출 방법을
    • (로컬 변수
    • 이 인스턴스에 변수
    • 이름 바꾸기 클래스와 네임 스페이스
    • 최적화 사용 제표 지역 변환 이름 바꾸기 PHP 관련)

    실제로 작동하는 SublimeText 플러그인이 있습니다. 새로운 코드를 살펴볼 때 코드베이스를 다루는 데 도움이되는 몇 가지 간단한 리팩토링을 적용 할 것입니다.