ホームページ  >  記事  >  バックエンド開発  >  致命的なエラー: 再宣言できません

致命的なエラー: 再宣言できません

WBOY
WBOYオリジナル
2016-08-18 09:16:162848ブラウズ

PHP インタラクティブ環境で、そのような定義がすでに存在する場合:

リーリー

元の文章が間違っていたことがわかり、変更する必要があります

リーリー

この時点でエラーが報告されます。致命的なエラー: 再宣言できません

定義する場合

リーリー

再度変更します

リーリー

php は b が定義されており、再度再宣言できないというエラーを報告することはありません
すみません、再宣言できないように関数を設計する理由は何ですか?
あなたの返信を読んだところ、この問題は実際に非常に一般的であることがわかりました。実際のプロジェクト環境でどのように解決できるかわかりません。

Qing プロジェクトのシナリオを考えてみましょう。関数を完成させるには、一度で関数を作成する必要があります。
それをインポートし、require('myfun.php') します。使用した後、myfun.php を開いて変更を加え、最後の php -a 環境を閉じます。 php - a を再起動し、import require('myfun.php') を実行します。
php -a 環境を閉じ (または終了) せず、変更した myfun.php を再度インポートしないと、次のエラーがすぐに報告されます: 致命的エラー: 再宣言できません。

PHP 言語のこの機能はデバッグ時に問題を引き起こします。何か簡単な方法はありますか?

返信内容:

PHP インタラクティブ環境で、そのような定義がすでに存在する場合:

リーリー

元の文章が間違っていたことがわかり、変更する必要があります

リーリー

この時点でエラーが報告されます。致命的なエラー: 再宣言できません

定義する場合

リーリー

再度変更します

リーリー

php は b が定義されており、再度再宣言できないというエラーを報告することはありません
すみません、再宣言できないように関数を設計する理由は何ですか?
あなたの返信を読んだところ、この問題は実際に非常に一般的であることがわかりました。実際のプロジェクト環境でどのように解決できるかわかりません。

Qing プロジェクトのシナリオを考えてみましょう。関数を完成させるには、一度で関数を作成する必要があります。
それをインポートし、require('myfun.php') します。使用した後、myfun.php を開いて変更を加え、最後の php -a 環境を閉じます。 php - a を再起動し、import require('myfun.php') を実行します。
php -a 環境を閉じ (または終了) せず、変更した myfun.php を再度インポートしないと、次のエラーがすぐに報告されます: 致命的エラー: 再宣言できません。

PHP 言語のこの機能はデバッグ時に問題を引き起こします。何か簡単な方法はありますか?

まずフォーマットを変更してもらえますか?

弱く型付けされた言語の場合、PHP 関数のオーバーロードは一般的な OOP とは異なります。
関数のオーバーロードは次の 2 つの条件を満たす必要があるためです。
1. 関数のパラメーターの数が異なります。
2.パラメータの種類が異なります。
PHP はこれら 2 つの点を満たすことができません。関数にさらにパラメーターを追加することは、追加の一時変数を渡すことと同じです。弱い型は本質的に区別されていないため、これらを介して実装することはできません。

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

関数は繰り返し定義できません -- これは確かに js とは異なります。 js の関数は実際には変数なので、再代入することができます。ただし、PHP では、関数は変数と同等ではなく、シンボルまたは定数と同等です。定義の重複は誤解を招きやすいためか、定義の重複は認められません。

...これは手続き型コードであり、オーバーロードの概念はありません。 。
最初のメソッドに
if ( ! function_exists('a')) {

リーリー

}
次に、最初の方法の前に 2 番目の方法の紹介を書きます。これが唯一の方法のようです

お誘いありがとうございます。
これより便利な方法はありません。主に対話型テストを使用する人がほとんどいないからですよね? php -a 環境を終了して再起動するのは面倒ではありません...
たとえば、https://glot.io/

を使用してテスト、シミュレーション、実行するのは非常に簡単です。

これについては本当に心配する必要はありません。また、言語がこのレベルからオーバーロードされた関数を提供するかどうかについて心配する必要もありません

特に php -a シェル環境やその他のものが好きですか?

この問題には実際には多くの解決策があります。最も簡単な方法は、この環境でデバッグするのが不便であると感じた場合に、x.php ファイルを編集してから、php がデバッグ機能を開始することです。

より高度なデバッグ方法を使用したい場合は、xdebug を試すこともできます

まず第一に、ほとんどの言語はメソッドの再定義をサポートしていません。PHP も例外ではありません。

第二に、あなたのデバッグ方法は本当に奇妙です。PHP には単体テストを含むさまざまなデバッグ ツールがあるのですが、これはデバッグとはみなされません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。