>  기사  >  백엔드 개발  >  치명적인 오류: 재선언할 수 없습니다.

치명적인 오류: 재선언할 수 없습니다.

WBOY
WBOY원래의
2016-08-18 09:16:162854검색

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에는 단위 테스트를 포함한 다양한 디버깅 도구가 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.