Home > Backend Development > PHP Tutorial > Fatal error: Cannot redeclare

Fatal error: Cannot redeclare

WBOY
Release: 2016-08-18 09:16:16
Original
2924 people have browsed it

In the php interactive environment, if there is already such a definition:

<code>function a(){
     return 'a';
}
</code>
Copy after login
Copy after login

Now I found that the original writing was wrong and needs to be changed

<code> function a(){
     return 'b';
 }
</code>
Copy after login
Copy after login

An error will be reported at this time, Fatal error: Cannot redeclare

If you define

<code>$b=1;</code>
Copy after login
Copy after login

Modify it again

<code>$b=2;</code>
Copy after login
Copy after login

php will never report an error saying that b has been defined and cannot be redeclare again
Excuse me, what is the reason for designing the function so that it cannot be redeclare?
I read your replies and found that this problem is actually very common. It will cause trouble in debugging. I don’t know how you can solve it in a real project environment.

Qing Let us consider the project scenario. You write a function to complete a function. Generally, you will not write the function perfectly in one go. You need to test it.
We import it, require('myfun.php'), and after using it, we find that we need to modify it. You open myfun.php and make modifications. After saving the modification, you close the last php -a environment and restart php - a, and then import require('myfun.php').
If you do not close (or exit) the php -a environment and import the modified myfun.php again, an error will be reported immediately: Fatal error: Cannot redeclare.

This feature of the PHP language causes trouble in debugging. Do you have any quick methods?

Reply content:

In the php interactive environment, if there is already such a definition:

<code>function a(){
     return 'a';
}
</code>
Copy after login
Copy after login

Now I found that the original writing was wrong and needs to be changed

<code> function a(){
     return 'b';
 }
</code>
Copy after login
Copy after login

An error will be reported at this time, Fatal error: Cannot redeclare

If you define

<code>$b=1;</code>
Copy after login
Copy after login

Modify it again

<code>$b=2;</code>
Copy after login
Copy after login

php will never report an error saying that b has been defined and cannot be redeclare again
Excuse me, what is the reason for designing the function so that it cannot be redeclare?
I read your replies and found that this problem is actually very common. It will cause trouble in debugging. I don’t know how you can solve it in a real project environment.

Qing Let us consider the project scenario. You write a function to complete a function. Generally, you will not write the function perfectly in one go. You need to test it.
We import it, require('myfun.php'), and after using it, we find that we need to modify it. You open myfun.php and make modifications. After saving the modification, you close the last php -a environment and restart php - a, and then import require('myfun.php').
If you do not close (or exit) the php -a environment and import the modified myfun.php again, an error will be reported immediately: Fatal error: Cannot redeclare.

This feature of the PHP language causes trouble in debugging. Do you have any quick methods?

Can you change the format first?

For weakly typed languages, PHP function overloading is not like general OOP.
Because function overloading must meet two conditions:
1. The number of function parameters is different.
2. The types of parameters are different.
PHP cannot satisfy these two points. You can add more parameters to the function, which is equivalent to passing in an extra temporary variable. Weak types are not inherently differentiated, so they cannot be implemented through these.

http://blog.csdn.net/smartyid...

Functions cannot be defined repeatedly -- this is indeed different from js. The function in js is actually a variable, so it can be reassigned. But in PHP, a function is not equivalent to a variable, but a symbol or a constant. Probably because repeated definitions can easily cause misunderstandings, repeated definitions are not allowed.

...This is procedural code, there is no concept of overloading. .
The first method plus
if ( ! function_exists('a')) {

<code>function a(){
     return 'a';
}</code>
Copy after login

}
Then write the introduction of the second method before the first one. It seems like this is the only way

Thanks for the invitation.
I don’t have a more convenient method, mainly because few people use interactive testing, right? It is not troublesome to exit the php -a environment and re-enter...
It is very simple to test and simulate and run it. For example, you can use https://glot.io/

There is really no need to worry about this, and there is no need to worry about whether the language provides overloaded functions from this level

Do you particularly like the php -a shell environment or something else?

There are actually many solutions to this problem. The simplest one is if you find it inconvenient to debug in this environment, then edit an x.php file, and then php Comes to debugging function.

If you really want to use a more advanced debugging method, you can also try xdebug

First of all, most languages ​​do not support method redefinition, and PHP is no exception.

Secondly, your debugging method is really strange. It is the first time I have seen someone use php -a to debug. PHP has various debugging tools, including unit testing. The php -a you used cannot be considered debugging.

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template