从对象获取变量类型

时间:2012-09-05 15:49:03

标签: php

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

这是我的目标:

$问题

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


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

输出为:

  

1是一个字符串

但是1是整数...

我做错了什么?

4 个答案:

答案 0 :(得分:3)

如果值是从$_GET$_POST传递的,则会自动将其视为字符串。如果是从mysql query it is being returned as a string返回的。

充其量,您可以使用settype将其设置为整数。话虽如此,PHP非常liberal when it comes to types及其价值。

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的自动类型转换的一个例子是加法运算符'+'。如果任一操作数是浮点数,则两个操作数都被计算为浮点数,结果将是浮点数。否则,操作数将被解释为整数,结果也将是整数。请注意,这不会改变操作数本身的类型;唯一的变化是如何评估操作数以及表达式本身的类型。

答案 1 :(得分:1)

我使用EZsql来获取对象......我没有定义变量。我认为is_numeric()函数可以完成这项工作:)

谢谢!

答案 2 :(得分:0)

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

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

会产生:

int(1)
string(1) "1"

答案 3 :(得分:0)

您没有将其定义为字符串,而是以这种方式定义:

$question->answer = 1;

你需要如此定义它:

$question->answer = "1";

PHP也可以使用隐式变量,因此它可以自动将数字答案声明为整数。要解决此问题,如果$var = "1",请按以下方式定义:

$question->answer = strval($var);