3

なぜセッションを開始できなかったのか疑問に思って3時間過ごしたところ、次のことを使用したことに気付きました。

session_start;

私が使うべきだったとき:

session_start();

エラーメッセージはまったく表示されませんでした。

おそらく、それは関数と変数を区別するための怠惰な方法だと思いましたが、変数には$が必要なため、そうすることはできないことを思い出しました。

かっこが必要な理由と、かっこを使用しないときにエラーが発生しない理由を誰かに教えてもらえますか?

4

5 に答える 5

9

通知を受け取ります(error_reportingをに設定しましたE_ALL):

注意:未定義の定数session_startの使用-5行目の/t.phpで「session_start」と見なされます

関数と定数の違いはわかりませんが、関数には常に括弧が必要です(ご覧のとおり)。コードは、それを読む人間が理解できるように作成する必要があるため、定数または関数呼び出しであるかどうかをリーダーが確認できないようにすると、読み取りとデバッグが少し難しくなります。

一部の古いコードは、引用符で囲まれていない文字列を使用して配列にアクセスする傾向があるため、エラーエラーではなく通知であると思います。この名前の定数がない場合、PHPは引用符で囲まれた文字列として扱います。

$myArray[myString] = 25;
于 2010-05-14T10:50:28.493 に答える
2

関数に括弧がない場合、関数と定数を区別することはできません...しかし、エラーがスローされないのは奇妙です... php.iniファイルでエラーをオフにしましたか?

于 2010-05-14T10:53:47.177 に答える
1

PHPの言語仕様にそのように記載されているため、括弧が必要です(検出される言語の明示的な正式な仕様がないように見えますが)。

不明な識別子が検出された場合にPHPが行うことは、不明な識別子が使用されたことを通知するE_NOTICEエラーを出力し、その識別子を文字列として使用することを意図していると想定します

<?php
$foo = unknown_identifier;
echo 'Now printing: ' . $foo; // prints 'Now printing: unknown_identifier' (PHP 5.2.6)
?>

エラーが表示されない理由は、E_NOTICEエラーがエラー報告のしきい値を下回っているためである可能性があります。このしきい値は、error_reportingディレクティブを使用して変更できます。

<?php
error_reporting(E_ALL);

$foo = unknown_identifier;
echo 'Now printing: ' . $foo;
?>

これにより、Yacobyによって上記に投稿された「通知」エラーメッセージが出力されます。

誤解を招くように、E_ALLエラーレポートディレクティブには、実際にはPHP5.xのすべてのレポートレベルが含まれているわけではないことに注意してください。PHP 5では、を使用E_ALL | E_STRICTしてすべてのエラーメッセージを有効にする必要があります。

-編集:多くの人に殴られました。

于 2010-05-14T11:05:23.753 に答える
0

私が知っている、またはこれまでに使用したすべての言語は、パラメーターを受け取らない(void)か、パラメーターリストがある(オプションかどうか)かにかかわらず、関数を記述するために角かっこを使用します。そのうち慣れるよ。多分それはすべての関数プロトタイプとすべてを備えたCからの二日酔いです。

そうは言っても、PHPのエコー機能は、完全な関数ではありませんが、ステートメントであるため、奇妙なものです。

http://en.wikipedia.org/wiki/Function(computer_science)をご覧ください

于 2010-05-14T10:53:38.993 に答える
-1

()は、関数が呼び出されることを示します。それがなければ、参照を渡すことができます。例(PHP 5.3):

$callable = session_start;
$callable();
于 2010-05-14T10:54:37.863 に答える