echo()接受数字吗?

时间:2011-08-05 15:51:35

标签: php echo

我对编程比较陌生,在阅读语言文档时我仍然不确定自己。来自php.net的PHP回声描述是:

void echo ( string $arg1 [, string $... ] )

因此在我看来输入参数必须是string类型。但是,echo与数字一起使用。例如,代码......

<p><?php echo 3; ?></p>

...成功将3打印到页面。那么$ arg1和$ ...的参数类型不应该是伪类型mixed(而不仅仅是字符串)来表明echo会接受字符串数字吗?否则,我怎样才能从文档中推断数字参数是否可以接受?

6 个答案:

答案 0 :(得分:8)

答案 1 :(得分:3)

  

那么$ arg1和$ ...的参数类型不应该是假型混合(而不仅仅是字符串)来表示echo会接受字符串或数字吗?

实际上在手册中,string也是一种伪类型。不像mixed这样的真实伪类型(参见Pseudo-types and variables used in the PHP documentation)。

更准确地说,string is loosely typed

  

PHP不要求(或支持)变量声明中的显式类型定义; 变量的类型由使用变量的上下文决定。 [由我强调]也就是说,如果将字符串值赋给变量$ var,则$ var变为字符串。如果然后将整数值赋给$ var,则它变为整数。

由于这是变量,同样适用于other types of expressions表达式的类型由使用表达式的上下文确定

在您的情况下,表达式3用于echo函数的字符串上下文中。 PHP完全没有问题使用3作为字符串,因此您不会收到错误并显示(作为字符串)。

  

否则,我怎样才能从文档中推断数字参数是否可以接受?

echo需要string个参数。当你传递一个(变量)表达式,它是一个字符串,一个数字,一个布尔值,一个NULL或一个资源(见Types)时,所有这些类型都被用作字符串。因此,每当您看到string作为类型时,只需使用字符串表达式。这并不意味着您需要将表达式显式定义为字符串以使其工作,因为PHP没有明确的类型定义。

答案 2 :(得分:2)

Php处理var松散,在这里阅读更多:

http://php.net/manual/en/language.types.type-juggling.php

答案 3 :(得分:1)

php可以自动更改类型(正确或错误取决于你站在哪个角落)所以在大多数情况下它很少关注...

答案 4 :(得分:0)

并不是echo改变了任何类型。

echo()是一种语言结构,其参数将被视为字符串。因此,它会在每个参数传递给它时产生刺痛。

然而,

语言级别的PHP对数据类型没有任何问题,因为它是dynamic loosely typed语言(如Lisp或Perl,与Python或C严格打字。)

所以,即使(几乎) 1 你所说的一切基本上都是一个表达式,每个句子都有一个返回值。

每个值都有一个内在类型。例如,假设4integer类型的值。这将永远是真的。 因此,如果您测试类型完整性,isint(4)将始终返回值true(类型boolean)。

然而,PHP中的方法是它应该是关心在运行时提升所需类型的语言,而不是程序员必须考虑变量的类型,这在一些用例中甚至可能是可变的(像通用的快速排序函数构造)。

因此,无论何时使用表达式作为另一个表达式的一部分,都会有一个类型推断过程,通过该过程,每个子表达式都会被提升为推断类型(通过已经解析过的超级表达式部分)。 / p>

所以我们假设我们有"13" . 37这个词。在PHP中,.是字符串连接运算符。 "13"string - 类型的表达式。那么,.的正确运算符应该是一个字符串。事实并非如此,Zend引擎寻找一种将37整数表达式提升为字符串的简便方法。它找到一个:字符串"37",由C printf("%d", value)表达式生成。

任何数据类型都会发生相同的推理过程。这在高级编程主题中可能有点令人不安,因为人们不能总是只检查表达式的值,而是检查表达式的类型,因为类型的自动提升可能会触发一个天真的程序员可能拥有的真值。未处理表达式类型而未选中。

在以下环境中尤其如此:

if     ($anything == 6) { /* Will be triggered also with "6" */ }
elseif (!$anything) { /* will be triggered with the empty string too */ }
elseif (is_string($anything)) { /* will not be triggered with "6" nor "" because of the else */ }
elseif ($anything == true) { /* will be triggered with anything that is not false:
    1, "1", 4, "anything", myObjectInstance(), AND also with the
    string "false", that is promoted to boolean true. (Boolean false is the empty string) */ }

如果要查找字节的ASCII表示,请使用chr()


1 有一些例外,比如namespace构造,declare构造,这不是Lisp :-D

答案 5 :(得分:0)

AFAIK php确实将变量(特别是混合变量)转换为字符串

例如..

$myArray = array(1,2,3);

如果您将回显$ myArray,它将导致

  

阵列