7

今日、次のコードをテストしたときは驚きました。

$star = "Aquarius";
$star = 11;

デバッグ中に、タイプごとに$star単純に変化することがわかりました。この機能には驚きました。たとえば、C++ ではこれはまったく不可能ですが、c# では var 変数を検討しましたが、同じではありません。stringinteger

たとえば、次のことはできません。

var dynamic = "Hello";
dynamic = 3;

基本的に $star = 11 と言った時点で正確に何が起こるのか疑問に思い始めました。私の推測では、$star直接割り当てられているため、単純に再初期化されていると思います (ただし、インタープリターは変数$starが以前に宣言されていることを既に知っているため、これは奇妙に思えます) 。 . ソースに裏付けられた明確な、または公式の説明を手伝ってくれる人はいますか?

ありがとう。

4

3 に答える 3

7

C/C++ では、型に基づいて発生する可能性のある最適化の種類のために、型はコンパイル時に定義されます。

C# では、コンパイラはコンテキストに基づいて型を推測し、コンパイラの頭脳でvarは型をキーワードに置き換えます。これが、コンパイラが最初の推論を行った後に型を変更できない理由です。

PHP のようなスクリプト言語では、変数はハッシュ マップ (連想配列、シンボル テーブル) へのエントリです。これにより、名前空間 (およびスコープ) が定義されます。実際の値の部分は、値と型の両方を格納する汎用オブジェクト型です。

于 2012-09-22T22:49:07.957 に答える
0

PHP は動的言語であり、Perl、Ruby、Python などの多くの言語と精神が似ています。一方、C++ はコンパイルされて静的に型付けされるため、コンパイル時に各変数の型を定義する必要があります。

PHP の動的型付けの実装に関する優れた洞察については、PHP のドキュメントを確認してください: http://php.net/manual/en/language.types.type-juggling.php

于 2012-09-22T22:48:31.940 に答える
0

PHP は緩やかに型付けされた言語です。PHP は、値に従って変数を正しいデータ型に変換します。

これをチェックしてください - http://php.net/manual/en/language.types.type-juggling.php

于 2012-09-22T22:52:51.287 に答える