最終編集:私はこの疑問を新しい質問に要約し、簡略化しました。再度、感謝します!PHP関数が2回呼び出されました、面白い警告メッセージ
NEW:
は、あなたが私にこののあなたの意見を伝え、そしてあなたはそれを再作成することができた場合、おそらく見ることができます:
を現在、$ポスト> POST_CONTENT変数が含まれています
"before <img src="/path/to/valid_img.gif" /> after"
を
このコードは、テーマheader.phpの先頭に配置されています。
------ Code --------
1: $str = $post->post_content;
2: assert(isset($str));
3: assert(is_string($str));
4: echo $str;
5: $str = 'before <img src="/path/to/nonexistant.gif" /> after';
6: assert(isset($str));
7: echo $str;
--------------------
これらの警告で
出力この...
------ Output ------
before <img src="/path/to/valid_img.gif" /> after
before <img src="/path/to/nonexistant.gif" /> after
--------------------
...
--- PHP Warnings ---
PHP Warning: assert() [<a href='function.assert'>function.assert</a>]: Assertion
failed in /path/to/header.php on line 2
PHP Warning: assert() [<a href='function.assert'>function.assert</a>]: Assertion
failed in /path/to/header.php on line 3
--------------------
は、なぜ私は100%それが必要知っているときのassertは()を2回失敗した場合、4が正常に$ strをエコーラインでしょう成功?
変数$ strを設定または解除する際に壊れた画像srcとは何が関係していますか?ワードプレスバグ/奇妙?今すぐクレイジー一部
...ライン5-7は、このようにnonexistant.gifを排除し、コメントアウトされている
は、アサート()警告が表示されず、出力はまだこれを適切に作成します。.. 。
------ Output ------
before <img src="/path/to/valid_img.gif" /> after
--------------------
あなたはこれを再現し、あなたの考えを教えてください。私はPHPを初めて使っていますが、私はこれが狂っていると確信しています。 :)
OLD:
私はPHPに比較的新しいだと私はこのコードを持っている:私は上記のコードを実行すると、それは罰金(FOO-ショートをやっている
$str = $post->post_content; // hi -- [hw] -- bye <img src="foobar.png" />
$str = core_wp('foo_shortcode', $str);
echo $str; // return $str; produces the same warning message
// If there is no echo or return, the warning message is not produced.
// The warning disappears when I statically set (as object) the initial $str to
// "hi -- [hw] -- bye <img src="foobar.png" />".
作品それは仕事です)。出力は次のとおりです。
hi -- Hello World -- bye <img src="foobar.png" />
私はいつもの$ strが存在しない場合、そのFOO-ショートは約二時間を除いて、自身二度目を実行しようとしているように見える私に言って、この警告メッセージを、取得が。
catch ... $ strに存在しないsrcを指し示すHTML imgタグが含まれている場合にのみ、この警告メッセージが表示されます。
PHP Warning: Missing argument 1 for foo_shortcode() in ...
そしてここでは、コア-WP()とFOO-ショート()である:
function core_wp($function, $a = NULL, $b = NULL)
{
$wrap = array
(
'foo_shortcode' => 'foo_shortcode',
);
$args = array();
if (isset($a)) $args[] = $a;
if (isset($b)) $args[] = $b;
return call_user_func_array($wrap[ $function ], $args);
}
function foo_shortcode($content) {
return str_replace('[hw]', 'Hello World', $content);
}
まず、なぜコード作業罰金が、その後、同時に自分自身をもう一度実行しようとするように思われる
?
$ strには無効なimgが含まれていますが、これはWordPressが$ post-> post_contentを生成する方法と関係があると思われます。
EDIT 1(ウェッズ、8:55 @ 7月22日)
は、私が(エラーログを追加しました)このようなあなたの指示に従って:
error_log('done1');
$str = $post->post_content;
error_log('done2');
$str = core_wp('foo_shortcode', $str);
error_log('done3');
...、それは私の誤りでこれを生産
[22-Jul-2009 08:52:49] done1
[22-Jul-2009 08:52:49] done2
[22-Jul-2009 08:52:49] PHP Warning: Missing argument 1 for foo_shortcode() in
/home/path/to/header.php on line 23
[22-Jul-2009 08:52:49] done3
を...と、ブラウザ(正しく)に送られ、出力されました::ログイン
hi -- Hello World -- bye <img src="foobar.png" />
...警告メッセージが生成されました。
EDIT 2(ウェッズ、9:18午前@ 7月22日)
私は、この主張を試してみました:
59: $str = $post->post_content;
60: assert(isset($str));
61: $str = core_wp('foo_shortcode', $str);
62: assert(isset($str));
...とPHPログが示しています
[22-Jul-2009 09:16:55] PHP Warning: assert() [<a
href='function.assert'>function.assert</a>]: Assertion failed in
/home/path/to/header.php on line 60
[22-Jul-2009 09:16:55] PHP Warning: Missing argument 1 for foo_shortcode() in
/home/path/to/header.php on line 23
。 ..しかし、出力は正しいですが、警告はまだ発行されています。
PHPは当初は$ str = $ post-> post-contentを設定していないようですが、core-wp( 'foo-shortcode'、$ str)を実行して「ああ! $ str = $ post-> post-content ... "を設定する必要がありますが、戻ってそれを設定し、正しいデータを出力します。
ありがとうEineki、$ argsを配列として初期化しても、そのトリックはありませんでした。 – Jeff
あなたは$ str = $ post-> post_contentですか? Nullとは何か違うものを評価する? – Eineki
はい、100%確信しています。$ post-> post_contentに "hi - [hw] - bye "という文字列が含まれています。 – Jeff