我对编程比较陌生,在阅读语言文档时我仍然不确定自己。来自php.net的PHP回声描述是:
void echo ( string $arg1 [, string $... ] )
因此在我看来输入参数必须是string类型。但是,echo与数字一起使用。例如,代码......
<p><?php echo 3; ?></p>
...成功将3打印到页面。那么$ arg1和$ ...的参数类型不应该是伪类型mixed
(而不仅仅是字符串)来表明echo会接受字符串或数字吗?否则,我怎样才能从文档中推断数字参数是否可以接受?
答案 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松散,在这里阅读更多:
答案 3 :(得分:1)
php可以自动更改类型(正确或错误取决于你站在哪个角落)所以在大多数情况下它很少关注...
答案 4 :(得分:0)
并不是echo
改变了任何类型。
echo()
是一种语言结构,其参数将被视为字符串。因此,它会在每个参数传递给它时产生刺痛。
语言级别的PHP对数据类型没有任何问题,因为它是dynamic loosely typed语言(如Lisp或Perl,与Python或C严格打字。)
所以,即使(几乎) 1 你所说的一切基本上都是一个表达式,每个句子都有一个返回值。
每个值都有一个内在类型。例如,假设4
是integer
类型的值。这将永远是真的。
因此,如果您测试类型完整性,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,它将导致
阵列