从对象获取变量类型

Kli*_*ian 5 php

我试图获取变量类型,但我不知道为什么,总是说变量是一个字符串。

这是我的对象:

$ question

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


echo $question->answer." is a ".gettype($question->answer);
Run Code Online (Sandbox Code Playgroud)

输出为:

1是一个字符串

但是1是整数...

我究竟做错了什么 ?

Flu*_*feh 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)
?>
Run Code Online (Sandbox Code Playgroud)

类型注释:

PHP在变量声明中不需要(或不支持)显式类型定义。变量的类型由使用该变量的上下文确定。也就是说,如果将字符串值分配给变量$ var,则$ var成为字符串。如果然后将一个整数值分配给$ var,它将变成一个整数。

PHP自动类型转换的一个示例是加法运算符“ +”。如果两个操作数中的任何一个都是浮点数,则两个操作数都将被评估为浮点数,结果将是一个浮点数。否则,操作数将被解释为整数,并且结果也将是整数。注意,这不会改变操作数本身的类型。唯一的变化是操作数的求值方式以及表达式本身的类型。


Mar*_*ski 0

这是因为您分配此变量的方式。这是例子:

$a = 1;
var_dump($a);
$a = "1";
var_dump($a);
Run Code Online (Sandbox Code Playgroud)

这会产生:

int(1)
string(1) "1"
Run Code Online (Sandbox Code Playgroud)