0

一重引用符があちこちにない連想配列を持つプロジェクトが割り当てられました。

例:

$foo[bar]

次のようになります。

$foo['bar']

これにより PHP 通知が生成されますが、これは非常に悪い習慣です。

PHP.netからの引用:

これは間違っていますが、うまくいきます。その理由は、このコードには文字列 ('bar' - 引用符に注意) ではなく、未定義の定数 (bar) があるためです。PHP は将来、残念ながらそのようなコードでは同じ名前を持つ定数を定義する可能性があります。これが機能するのは、PHP が生の文字列 (既知の記号に対応しない、引用符で囲まれていない文字列) を生の文字列を含む文字列に自動的に変換するためです。たとえば、bar という名前の定数が定義されていない場合、PHP は文字列 'bar' に置き換えてそれを使用します。

また、使用する前に定数を検索する必要があるため、パフォーマンスには適していません'key'

したがって、ファイルごとに1つずつ手動で実行する必要なく、これを実現できるスクリプトを誰かが知っているかどうか疑問に思っていました。

アップデート:

私はエディターとして Vim を使用しており、その検索と置換コマンドを 1 つのファイルで使用する方法を知っていますが、これには 2 つの問題があります。

  1. 正規表現をサポートしていないと思うので、このようなものを検索して置き換えることはできません。

  2. 現在開いているファイルでのみ機能します(私の知る限り)。

4

4 に答える 4

1

テキスト エディターは、正規表現を使用したグローバル検索と置換をサポートしていませんか?

私は次のようなものを検索するかもしれません:

(\$[a-zA-Z0-9]+\[)([^\]]+)\]

と置き換えます

\1'\2']

正規表現の検索と置換は、多数のソース ファイルを大幅に変更する場合に非常に便利です。ただし、グローバルな変更を行う前にコードのスナップショットを作成し、後で変更したいものがすべて変更され、意図しない副作用がないことを確認してください。

アップデート:

s/he が vim を使用しているという OP の更新に基づいて、この投稿の受け入れられた回答を参照してください: vim で複数のファイルに対して正規表現の検索/置換を使用することを説明するスクリプトを使用して、正規表現の置換をグローバルに多くのファイルに適用します。

sed のような構文は、探している (テストされていない) コマンドが次のようなものであることを示唆しています。

:args **/*.php | argdo %s/(\$[a-zA-Z0-9]+\[)([^\]]+)\]/\1'\2'/ge | update

少しいじる必要があるかもしれないので、すべてのファイルを変更する前にバックアップを作成してください。より使いやすい IDE を探すこともお勧めします。

于 2013-02-15T09:25:11.420 に答える
1

IDEは検索と置換を行いますか? ならそれを使おう。少し時間がかかるかもしれませんが、一度にすべてを変更するだけなので注意が必要です。

于 2013-02-15T09:25:34.663 に答える
1

これは、vim を使用した別の可能な解決策です。

:%s/\[\(\h*\)\]/\['\1'\]/gc

これにより、次のすべてのインスタンスが変更されます。

[foo]

に:

['foo']

と確認のプロンプトが表示されます。

次の例は変更されません (そうあるべきです)。

[$foo]
["foo"]
['foo']
[123]
于 2013-03-01T08:20:45.473 に答える
0

IDE を使用して、プロジェクトで検索と置換を行います。それらのほとんどでは、検索文字列に正規表現を入れることができるため、パターンに一致するたびに[[']置き換え']ます。

于 2013-02-15T09:25:33.307 に答える