echo()接受数字吗?

问题描述 投票:7回答:6

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

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

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

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

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

php echo
6个回答
8
投票

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
投票

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

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


1
投票

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


0
投票

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

比如..

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

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

排列


0
投票

这不是echo改变任何类型。

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

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

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

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

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

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

所以我们假设我们有"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

© www.soinside.com 2019 - 2024. All rights reserved.