> 백엔드 개발 > PHP 튜토리얼 > psysh와의 대화식 PHP 디버깅

psysh와의 대화식 PHP 디버깅

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2025-02-19 10:15:10
원래의
418명이 탐색했습니다.

psysh와의 대화식 PHP 디버깅 <:> 오전 1시입니다. 웹 응용 프로그램 제공 마감일은 8 시간 안에 있습니다. 작동하지 않습니다. 무슨 일이 일어나고 있는지 알아 내려고하면 버그가 어디에 있는지 var_dump ()와 다이 ()로 코드를 채우십시오.… 당신은 짜증이납니다. 반환 값 또는 가변 할당을 시도 할 때마다 소스 코드를 변경하고 응용 프로그램을 실행하고 결과를 확인해야합니다. 결국 Var_dump를 제거했는지 여부는 확실하지 않습니다. 코드. 이 상황은 당신에게 친숙합니까?

키 테이크 아웃

PSYSH는 브라우저의 JavaScript 콘솔과 유사한 PHP 코드의 즉각적인 상호 작용 및 실행을 허용하여 디버깅을 향상시키는 PHP를위한 강력한 대체 도구입니다.

Psysh의 설치는 작곡가를 사용하여 전 세계 또는 프로젝트 당 수행 할 수 있으며 런타임에서 코드를 검사하고 조작하기위한 다양한 명령을 지원합니다. PSYSH는 PHP 스크립트 또는 단위 테스트에 직접 통합되어 라이브 디버깅 환경을 제공 할 수 있으며, 이는 복잡한 응용 프로그램에서 버그를 식별하고 수정하는 데 특히 유용합니다. 이 도구는 명령 줄 인터페이스와 내장 PHP 웹 서버 모두에서 원활한 디버깅 경험을 제공하지만 Apache와 같은 외부 웹 서버와 호환되지는 않지만

.

psysh 구조 psysh는 read-eval-print 루프 (또는 REPL)입니다. 브라우저의 JavaScript 콘솔을 통해 대체를 사용했을 수 있습니다. 가지고 있다면, 당신은 그것이 많은 전력을 가지고 있으며 JS 코드를 디버깅하는 동안 유용 할 수 있다는 것을 알고 있습니다.

PHP에 대해 이야기하면서 PHP의 대화식 콘솔 (PHP -A)을 사용했을 수도 있습니다. 거기에서 일부 코드를 작성할 수 있으며 Console은 Enter를 누르 자마자 실행됩니다.

불행히도, 대화식 쉘은“p”(print)가 없기 때문에 대체가 아닙니다. $ a의 내용을보기 위해 에코 진술을 실행해야했습니다. 진정한 대답에서, 우리는 값을 할당 한 직후에 그것을 보았을 것입니다.

당신은 Composer G와 함께 전 세계적으로 psysh를 설치하거나 psysh 실행 파일을 다운로드 할 수 있습니다 : 작곡가

    직접 다운로드 (Linux/Mac)
  • 또한이 기사의 뒷부분에서 볼 수 있듯이 작곡가와 프로젝트 당 포함 할 수 있습니다. 이제 psysh와 약간 놀아 봅시다.
  • 주요 도움은 가장 친한 친구가 될 것입니다. 그것은 당신에게 모든 종류의 명령과 그들의 설명을 줄 것입니다 :
  • 기본적으로, 대체가 할 수있는 일은 :
  • 우리가 PSYSH를 PHP의 대화식 콘솔과 비교하면 Psysh는 할당 되 자마자 $ a 값을 인쇄합니다. 더 복잡한 예는 다음과 같습니다

    나는 함수를 정의하고 ()을 호출했다. 당신이 볼 수있는 두 널은 함수 정의 나 실행이 값을 반환하지 않았기 때문입니다 (함수는 값을 반영합니다). 또한 함수를 정의하는 동안 프롬프트는 >>>에서 .... 로 변경되었습니다. 클래스를 정의하고 인스턴스화 할 수 있습니까?

    FOO를 인스턴스화했을 때 생성자는 물체에 대한 참조를 반환했습니다. 이것이 Psysh 인쇄 입니다. 이제 psysh와 객체에 대해 흥미로운 점을 봅시다.
    php -a
    Interactive shell
    
    php > $a = 'Hello world!';
    php > echo $a;
    Hello world!
    php >
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    우연히 클래스 FOO가 정의한 메소드를 잊어 버리면 이제 답이 있습니다. Linux OS 또는 Mac 명령 줄 인터페이스를 사용 했습니까? LS 명령에 익숙 할 수 있습니다. -la 옵션을 기억합니까?

    달콤하지 않습니까?

    웹 애플리케이션과 통합 될 때 Psysh의 진정한 힘이 빛납니다. 데모 앱

    데코레이터 디자인 패턴을 보여주는 빠른 응용 프로그램을 구현하겠습니다. 그러한 패턴의 UML 클래스 다이어그램은 다음과 같습니다.
    composer g require psy/psysh:~0.1
    psysh
    로그인 후 복사
    로그인 후 복사
    UML 또는 디자인 패턴에 대해 많이 모르더라도 걱정하지 마십시오.이 기사에는 이들이 이해가 필요하지 않습니다.

    이 프로젝트의 경우 일련의 테스트 사례를 만들었습니다. 이러한 테스트 케이스는 PHPUnit에 의해 실행 될 수 있습니다. 다시 말하지만,이 기사를 이해하기 위해 단위 테스트에 익숙하지 않아도됩니다.

    이 작은 응용 프로그램의 전체 소스 코드는 https://github.com/sitepoint-examples/psysh wget psysh.org/psysh chmod +x psysh ./psysh에서 찾을 수 있습니다. 우선, psysh에 대한 종속성을 선언하려면 composer.json 파일을 정의해 봅시다 :

    작곡가를 설치 한 후에는 가면 좋을 것입니다.

    public/decorator.php 파일의 다음 소스 코드를 살펴보십시오. 그것은 Simple -Window, DecoratedWindow 및 제목의 Window 개체를 인스턴스화하여 Decorator 패턴을 보여줄 것입니다 : .
    ./psysh                                                                                                                                             
    
    Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
    >>>
    로그인 후 복사
    로그인 후 복사
    우리는 PHP의 CLI (명령 줄 인터페이스)를 통해 또는 구성된 경우 웹 서버를 통해 코드를 실행할 수 있습니다. PHP의 내부 웹 서버도 사용할 수 있습니다 Cli에서 디버깅 명령 줄 인터페이스를 통한 위 코드의 실행은 다음과 같습니다.

    우리는 어떻게 psysh와 상호 작용할 수 있습니까? psyshell을 추가하기 만하면 :: debug (get_defined_vars ()); 응용 프로그램을 디버그하려는 코드의 어느 곳에서나 일반적으로 var_dump () 문을 삽입 할 수있는 곳 :

    파일을 저장 한 후 다음 출력을 얻을 수 있습니다.

    스크립트의 실행이 중단되며 이제 Psysh의 재생 프롬프트가 있습니다. get_defined_vars ()를 psyshell :: debug ()에 매개 변수로 전달하므로 쉘 내부의 모든 정의 된 변수에 액세스 할 수 있습니다.

    $ 창 변수를 검사 해 봅시다
    php -a
    Interactive shell
    
    php > $a = 'Hello world!';
    php > echo $a;
    Hello world!
    php >
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    응용 프로그램 내부에 psysh가있는 것에 대해 좋은 점은 인스턴스화 된 객체의 소스 코드를 검사 할 수 있다는 것입니다.

    그래서 $ 창은 SimpleWindow의 인스턴스입니다. 창 인터페이스를 구현하는 SimpleWindow의 인스턴스… Window 인터페이스의 소스 코드가 어떻게 보이는지 궁금합니다.…

    간단한 바람과 장식용이 같은 출력이 같은 이유는 무엇입니까? $ DecoratedWindow 객체를 살펴 보겠습니다
    composer g require psy/psysh:~0.1
    psysh
    로그인 후 복사
    로그인 후 복사
    이 객체는 SimpleWindow보다 "무겁기 때문에"소스 코드가 길어질 수 있습니다. render () 메소드의 소스 코드 만 보자.

    getWindowReference () 메소드가 호출 된 다음 render () 메소드에서 결과를 반환합니다. getWindowReference () 소스 :

    를 확인해 봅시다
    wget psysh.org/psysh
    chmod +x psysh
    ./psysh
    로그인 후 복사
    이 메소드는 객체의 WindowReference 속성을 반환하고 있으며 위의 LS -AL 명령에서 보았 듯이 AcMepatternsDecoratorsimpleWindow의 인스턴스입니다. 물론, 우리는 DecinatedWindow :: __ Construct ()가 어떻게 작동하는지 살펴볼 수 있었지만 이것이 우리가 확인할 수있는 또 다른 방법입니다. 내장 서버로 디버깅을 불행히도, Apache와 같은 웹 서버를 통해 디버깅하는 것은 지원되지 않습니다. 그러나 PHP의 임베디드 서버를 사용하여 응용 프로그램을 디버깅 할 수 있습니다.

개발 서버는 이제 포트 8080에서 연결을 듣고 있습니다. 따라서이 웹 서버 (https : // localhost : 8080/decorator.php)를 통해 Decorator.php 파일을 요청하자마자 다음을 볼 수 있습니다.
./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
로그인 후 복사
로그인 후 복사

우리는 cli 와 마찬가지로 Psysh와 함께 연주를 시작할 수 있습니다.

>>> help

  help      Show a list of commands. Type `help [foo]` for information about [foo].      Aliases: ?
  
  ls        List local, instance or class variables, methods and constants.              Aliases: list, dir
  
  dump      Dump an object or primitive.
  
  doc       Read the documentation for an object, class, constant, method or property.   Aliases: rtfm, man 
  
  show      Show the code for an object, class, constant, method or property.
  
  wtf       Show the backtrace of the most recent exception.                             Aliases: last-exception, wtf?
  
  trace     Show the current call stack.
  
  buffer    Show (or clear) the contents of the code input buffer.                       Aliases: buf
  
  clear     Clear the Psy Shell screen.
  
  history   Show the Psy Shell history.
  
  exit      End the current session and return to caller.                                Aliases: quit, q
로그인 후 복사
단위 테스트 로 디버깅 좋은 개발자는 코드에 대한 단위 테스트를 예상대로 작동한다는 증거로 작성해야합니다. 프로젝트 파일에서 테스트 폴더를 찾을 수 있으며 PHPUnit이 설치된 경우 그 안에 테스트를 실행할 수 있습니다.

코드가 완벽하게 실행되는 것처럼 보이지만 테스트가 실패합니다. 실패한 테스트 만 실행하여 더 자세히 살펴볼 수 있습니다.

오류가 생성되는 테스트, 파일 및 줄이 있습니다. WindowTest.php
>>> help ls

Usage:

ls [--vars] [-c|--constants] [-f|--functions] [-k|--classes] [-I|--interfaces] [-t|--traits] [-p|--properties] [-m|--methods] [-G|--grep="..."] [-i|--insensitive] [-v|--invert] [-g|--globals] [-n|--internal] [-u|--user] [-C|--
category="..."] [-a|--all] [-l|--long] [target]

Aliases: list, dir

Arguments:

 target             A target class or object to list.
 
 
Options:

 --vars             Display variables.
 
 --constants (-c)   Display defined constants.
 
 --functions (-f)   Display defined functions.
 
 --classes (-k)     Display declared classes.
 
 --interfaces (-I)  Display declared interfaces.
 
 --traits (-t)      Display declared traits.
 
 --properties (-p)  Display class or object properties (public properties by default).
 
 --methods (-m)     Display class or object methods (public methods by default).
 
 --grep (-G)        Limit to items matching the given pattern (string or regex).
 
 --insensitive (-i) Case-insensitive search (requires --grep).
 
 --invert (-v)      Inverted search (requires --grep).
 
 --globals (-g)     Include global variables.
 
 --internal (-n)    Limit to internal functions and classes.
 
 --user (-u)        Limit to user-defined constants, functions and classes.
 
 --category (-C)    Limit to constants in a specific category (e.g. "date").
 
 --all (-a)         Include private and protected methods and properties.
 
 --long (-l)        List in long format: includes class names and method signatures.
 
 
 Help:
 
 List variables, constants, classes, interfaces, traits, functions, methods, and properties.
 
 Called without options, this will return a list of variables currently in scope.
 
 If a target object is provided, list properties, constants and methods of that target. If a class, interface or trait name is passed instead, list constants and methods on that class.
 
 e.g. 
 
 >>> ls
 >>> ls $foo
 >>> ls -k --grep mongo -i
 >>> ls -al ReflectionClass
 >>> ls --constants --category date
 >>> ls -l --functions --grep /^array_.*/
 >>>
로그인 후 복사
라는 제목을 살펴 보겠습니다

PhPunit에 익숙하지 않은 경우 코드에 너무 많은 관심을 기울이지 마십시오. 간단히 말해서, 제목의 window :: addtitle () 메소드를 테스트하기 위해 모든 것을 설정하고 비 빈 값을받을 것으로 기대합니다. 그래서 우리는 어떻게 Psysh를 사용하여 무슨 일이 일어나고 있는지 확인합니까? 이전과 같이 쉘 :: debug () 메소드를 추가하십시오

우리는 흔들 준비가되어 있습니다!

그래서 $ rs에 문자열이 있어야합니다. 우리가 정말로 무엇을 가지고 있는지 봅시다.

null 값, 테스트가 실패한 것은 놀라운 일이 아닙니다… LS 명령을 수행하면 $ WINDOW 객체를 통해 해당 객체의 방법을 사용할 수 있음을 알 수 있습니다.
php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
로그인 후 복사
로그인 후 복사
로그인 후 복사
버그가 있습니다. 이 메소드는 값을 반환하는 대신 값을 반영합니다. 응용 프로그램이 올바르게 작동하는 것처럼 보이지만 단위 테스트와 PSYSH를 통해 결함을 발견했으며 이제 수정할 수 있습니다.

.

결론 이 기사는 Psysh가 가지고있는 모든 잠재력을 보여주는 데 철저한 것이 아닙니다. 시도해야 할 다른 멋진 기능 ( 'Doc'과 같은)이 있습니다. Psysh만으로는 그다지 유용하지 않을 수 있지만 다른 도구 및 영리한 디버깅 파워와 결합하면 귀중한 자산이 될 수 있습니다.

. psysh를 사용한 대화식 PHP 디버깅에 대한 자주 묻는 질문 (FAQ) PSYSH 란 무엇이며 PHP 디버깅에서 어떻게 작동합니까?

PSYSH는 PHP의 런타임 개발자 콘솔, 대화식 디버거 및 read-eval-eval-print 루프 (REPL)입니다. PHP 코드를 실행하고 즉시 출력을 볼 수있는 대화식 명령 줄 인터페이스를 제공합니다. PSYSH는 코드를 밟고 변수를 검사하며 대화식 변경 사항을 테스트 할 수 있으므로 디버깅에 특히 유용합니다. 코드와 대화하는 것과 같습니다. 이는 더 나은 이해와 더 빠른 버그 해상도로 이어질 수 있습니다.

PHP 디버깅 용 PSYSH를 어떻게 설치합니까?

psysh는 작곡가를 사용하여 전 세계적으로 설치할 수 있습니다. PHP 용 종속성 관리 도구. Command Composer Global 요구 사항 PSY/PSYSH를 실행하여 설치할 수 있습니다. 설치 후 터미널에서 psysh를 입력하여 psysh를 시작할 수 있습니다. 시스템이 psysh 실행 파일을 찾을 수 있도록 경로에 글로벌 작곡가 바이너리를 포함시켜야합니다.

psysh를 사용하여 PHP 코드를 디버깅하려면 psysh를 사용하여 PHP 코드를 디버깅하려면 어떻게해야합니까? , psysh ()를 삽입 할 수 있습니다. 대화식 디버깅 세션을 시작하려는 코드의 어느 시점에서나. 코드 실행 이이 시점에 도달하면 Psysh는 대화식 쉘을 열어 변수를 검사하고 코드를 실행하며 코드 실행을 진행할 수 있습니다.

PHP에서 단위 테스트에 psysh를 사용할 수 있습니까?

. 예, Psysh는 PHP의 단위 테스트에 매우 유용 할 수 있습니다. psysh를 사용하여 테스트 실행 중 언제라도 테스트를 대화식으로 디버깅하고 변수 검사 및 상태를 표시 할 수 있습니다. 이것은 테스트가 실패한 이유를 이해하는 데 특히 유용 할 수 있습니다.

psysh 구성을 사용자 정의하려면 어떻게해야합니까?

psysh에서 .psysh.php 파일을 작성하여 구성을 사용자 정의 할 수 있습니다. 홈 디렉토리. 이 파일에서는 기본값 포함, 오류 레벨 및 명령 기록 크기와 같은 구성 옵션을 설정할 수 있습니다. 사용자 정의 명령 또는 클리너를 추가 할 수도 있습니다 psysh의 일부 고급 기능은 무엇입니까?

psysh에는 PHP 코드를보다 효과적으로 디버깅하는 데 도움이되는 많은 고급 기능이 제공됩니다. 여기에는 런타임을 통한 코드 실행, 자동 세미콜론 삽입, 네임 스페이스 지원, 읽기 지원, 예외 처리 등이 포함됩니다. PSYSH는 또한 변수, 기능, 클래스 및 PHP 내장 키워드에 대한 탭 완료를 지원합니다.

PSYSH는 어떻게 오류 및 예외를 처리합니까?

PSYSH는 강력한 오류 및 예외 처리 메커니즘을 가지고 있습니다. 오류 또는 예외가 발생하면 PSYSH는 상세한 스택 추적을 표시하여 오류가 발생한 위치와 이유를 정확하게 이해할 수 있도록 도와줍니다. WTF 명령을 사용하여 언제든지 마지막 예외 스택 추적을 표시 할 수 있습니다.

내가 좋아하는 PHP 프레임 워크와 함께 psysh를 사용할 수 있습니까?

예, Psysh는 대부분의 PHP 프레임 워크에서 잘 작동합니다. Laravel, Symfony 및 Zend 프레임 워크를 포함하여. Laravel과 같은 일부 프레임 워크에는 팅커 명령을 위해 psysh를 포함시킵니다.

psysh 프로젝트에 어떻게 기여할 수 있습니까?

psysh는 Github에서 호스팅 된 오픈 소스 프로젝트입니다. 버그를보고하거나 기능을 제안하거나 풀 요청을 제출함으로써 프로젝트에 기여할 수 있습니다. 기여하기 전에 프로젝트의 기고 가이드 라인을 읽으십시오.

PSYSH에 대해 더 많은 리소스를 찾을 수있는 곳은 어디에서 찾을 수 있습니까?

공식 PSYSH 웹 사이트와 GitHub 리포지토리는 리소스를 찾을 수있는 가장 좋은 장소입니다. psysh에 대해. 자세한 문서, 사용법 예제 및 사용 가능한 명령 목록이 포함됩니다. 다양한 PHP 및 개발자 블로그에서 자습서와 기사를 찾을 수도 있습니다.

위 내용은 psysh와의 대화식 PHP 디버깅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿