5

変数の型を取得しようとしていますが、その理由はわかりません。変数は文字列であると常に言います。

これが私のオブジェクトです:

$質問

stdClass Object
        (
            [reply_id] => 8
            [q_key] => 35BBs2xy1346230680
            [answer] => 1
        )


echo $question->answer." is a ".gettype($question->answer);

出力は次のとおりです。

1 は文字列です

しかし、1は整数です...

私は何を間違っていますか?

4

4 に答える 4

5

値が$_GETまたはから渡された場合$_POST、それは自動的に文字列として扱われました。mysqlクエリから返された場合は、文字列として返されます。

せいぜい、 settypeを使用して整数に設定できます。そうは言っても、PHPは型とその値に関してはかなりリベラルです。

settypeの例:

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo is now 5   (integer)
settype($bar, "string");  // $bar is now "1" (string)
?>

タイプからのメモ:

PHPは、変数宣言で明示的な型定義を必要としません(またはサポートしません)。変数のタイプは、変数が使用されるコンテキストによって決定されます。つまり、文字列値が変数$ varに割り当てられている場合、$varは文字列になります。次に整数値が$varに割り当てられると、整数になります。

PHPの自動型変換の例は、加算演算子「+」です。いずれかのオペランドがfloatの場合、両方のオペランドがfloatとして評価され、結果はfloatになります。それ以外の場合、オペランドは整数として解釈され、結果も整数になります。これは、オペランド自体のタイプを変更しないことに注意してください。唯一の変更点は、オペランドの評価方法と式自体のタイプです。

于 2012-09-05T16:02:23.173 に答える
1

EZsqlを使用してオブジェクトを取得しています...変数を定義していません。is_numeric()関数がその仕事をするだろうと思います:)

ありがとう!

于 2012-09-05T16:15:15.223 に答える
0

これは、この変数を割り当てる方法が原因です。次に例を示します。

$a = 1;
var_dump($a);
$a = "1";
var_dump($a);

これは以下を生成します:

int(1)
string(1) "1"
于 2012-09-05T15:53:58.437 に答える
0

次のように定義するのではなく、文字列として定義しませんでした。

$question->answer = 1;

次のように定義する必要があります。

$question->answer = "1";

PHP は暗黙の変数でも動作するため、数値の回答を整数として自動的に宣言する場合があります。これを修正するには、 ifを次のよう$var = "1"に定義します。

$question->answer = strval($var);
于 2012-09-05T15:55:07.147 に答える