PHP 대화형 환경에서 이미 다음과 같은 정의가 있는 경우:
<code>function a(){ return 'a'; } </code>
이제 원문이 잘못되어 수정이 필요하다는 것을 알게 되었습니다
<code> function a(){ return 'b'; } </code>
이번에는 오류가 보고됩니다. 치명적인 오류: 재선언할 수 없습니다
정의한다면
<code>$b=1;</code>
다시 수정하세요
<code>$b=2;</code>
php에서는 b가 정의되어 다시 재선언할 수 없다는 오류를 절대 보고하지 않습니다
죄송하지만 재선언할 수 없도록 함수를 설계한 이유가 무엇인가요?
귀하의 답변을 읽어보니 이 문제는 실제로 매우 흔하고 디버깅에 문제를 일으킬 수 있다는 것을 알았습니다. 실제 프로젝트 환경에서 이 문제를 어떻게 해결할 수 있는지 모르겠습니다.
함수를 완성하기 위해 함수를 작성한다고 가정해 보겠습니다. 일반적으로 함수를 한번에 완벽하게 작성하지는 않습니다.
이를 가져오고 require('myfun.php')를 사용하고 나면 수정이 필요하다는 것을 알게 됩니다. myfun.php를 열고 수정 사항을 저장한 후 마지막 PHP를 닫습니다. 환경을 설정하고 php -a를 다시 시작한 다음 require('myfun.php')를 가져옵니다.
php -a 환경을 닫거나 종료하지 않고 수정된 myfun.php를 다시 가져오면 다음과 같은 오류가 즉시 보고됩니다. 치명적인 오류: 재선언할 수 없습니다.
PHP 언어의 이 기능은 디버깅에 문제를 일으킵니다. 빠른 방법이 있나요?
PHP 대화형 환경에서 이미 다음과 같은 정의가 있는 경우:
<code>function a(){ return 'a'; } </code>
이제 원문이 잘못되어 수정이 필요하다는 것을 알게 되었습니다
<code> function a(){ return 'b'; } </code>
이번에는 오류가 보고됩니다. 치명적인 오류: 재선언할 수 없습니다
정의한다면
<code>$b=1;</code>
다시 수정하세요
<code>$b=2;</code>
php에서는 b가 정의되어 다시 재선언할 수 없다는 오류를 절대 보고하지 않습니다
죄송하지만 재선언할 수 없도록 함수를 설계한 이유가 무엇인가요?
귀하의 답변을 읽어보니 이 문제는 실제로 매우 흔하고 디버깅에 문제를 일으킬 수 있다는 것을 알았습니다. 실제 프로젝트 환경에서 이 문제를 어떻게 해결할 수 있는지 모르겠습니다.
Qing 함수를 완성하기 위해 함수를 작성한다고 가정해 보겠습니다. 일반적으로 함수를 한 번에 완벽하게 작성하지는 않습니다.
이를 가져오고 require('myfun.php')를 사용하고 나면 수정이 필요하다는 것을 알게 됩니다. myfun.php를 열고 수정 사항을 저장한 후 마지막 PHP를 닫습니다. 환경을 설정하고 php -a를 다시 시작한 다음 require('myfun.php')를 가져옵니다.
php -a 환경을 닫거나 종료하지 않고 수정된 myfun.php를 다시 가져오면 다음과 같은 오류가 즉시 보고됩니다. 치명적인 오류: 재선언할 수 없습니다.
PHP 언어의 이 기능은 디버깅에 문제를 일으킵니다. 빠른 방법이 있나요?
먼저 형식을 바꿔주실 수 있나요?
약한 유형의 언어의 경우 PHP 함수 오버로드는 일반적인 OOP와 다릅니다.
함수 오버로딩은 두 가지 조건을 충족해야 하기 때문입니다.
1. 함수 매개변수의 개수가 다릅니다.
2. 매개변수의 유형이 다릅니다.
PHP는 이 두 가지 점을 충족할 수 없습니다. 함수에 더 많은 매개변수를 추가할 수 있습니다. 이는 추가 임시 변수를 전달하는 것과 같습니다. 약한 유형은 본질적으로 구별되지 않으므로 이를 통해 구현할 수 없습니다.
http://blog.csdn.net/smartyid...
함수는 반복적으로 정의할 수 없습니다. 이는 실제로 js와 다릅니다. js의 함수는 실제로 변수이므로 다시 할당할 수 있습니다. 그러나 PHP에서 함수는 변수가 아니라 기호 또는 상수와 동일합니다. 아마도 반복 정의는 오해를 불러일으킬 수 있기 때문에 반복 정의는 허용되지 않습니다.
...절차적 코드이므로 오버로드 개념이 없습니다. .
첫 번째 방법에
if ( !function_exists('a')) {
<code>function a(){ return 'a'; }</code>
}
그럼 첫 번째 방법 앞에 두 번째 방법 소개를 적어주시면 좋을 것 같습니다
초대해주셔서 감사합니다.
대화형 테스트를 사용하는 사람이 거의 없기 때문에 이보다 편리한 방법은 없지요? php -a 환경을 종료하고 다시 들어가시면 어렵지 않습니다...
아주 간단한 테스트 시뮬레이션이고, 예를 들어 https://glot.io/
이런 부분은 정말 걱정할 필요가 없고, 이 수준에서 언어가 오버로드된 기능을 제공하는지 걱정할 필요도 없습니다
php -a 등의 쉘 환경을 특히 좋아하시나요?
이 문제에 대한 해결책은 실제로 많이 있습니다. 이 환경에서 디버깅하는 것이 불편할 경우 가장 간단한 방법은 x.php 파일을 편집하면 php x.php가 수정된 코드의 결과를 다음 위치에 출력하는 것입니다. 한 번 디버깅 역할을 합니다.
정말로 고급 디버깅 방법을 사용하고 싶다면 xdebug를 사용해 볼 수도 있습니다
우선, 대부분의 언어는 메소드 재정의를 지원하지 않으며, PHP도 예외는 아닙니다.
두 번째로, 디버깅 방법이 정말 이상합니다. 누군가가 디버깅을 위해 php -a를 사용하는 것을 처음 봤습니다. PHP에는 단위 테스트를 포함한 다양한 디버깅 도구가 있습니다.