这是一个关于PHP内部的问题以及它如何在幕后工作:
php如何决定:
$a = 3;
需要是一个整数(内部)?
以及如何
$a = "3";
需要是一个字符串?
我曾经听说过PHP使用周围的每个变量(到不同的类型)来确定它所需的内部数据类型,但是当我试图验证这个语句时,我无法在互联网上找到任何相关信息。
官方PHP文档中有一些奇怪的例子描述了一些语言的奇怪行为:
来源:http://php.net/manual/en/language.types.type-juggling.php
<?php
$foo = "0"; // $foo is string (ASCII 48)
$foo += 2; // $foo is now an integer (2)
$foo = $foo + 1.3; // $foo is now a float (3.3)
$foo = 5 + "10 Little Piggies"; // $foo is integer (15)
$foo = 5 + "10 Small Pigs"; // $foo is integer (15)
?>
但这不回答我的问题。
它只是以非常模糊的方式展示了动态PHP的方式。
我认为这与评估没有任何关系(例如&#34;&#34;:= false但&#34; abc&#34;:= true),不是&n它?
还有一个问题:php如何提取&#34;原语&#34;字符串中的整数,如&#34; 10小猪&#34;?这可以通过类型转换(内部)来完成,还是需要使用包含的char转换或其他东西进行某种字符串处理?
答案 0 :(得分:1)
PHP会根据需要自动将值从一种类型转换为另一种类型。如果变量包含字符串,但您在算术表达式中使用它,则会将其转换为数字。如果它包含一个数字,但是你将它用作需要字符串的函数的参数,它会将它转换为字符串。
执行比较时,如果两个值的类型不同,其中一个将转换为另一个类型(除非您使用&#34; strict&#34;比较运算符,===
和!==
)。 type comparison tables解释将根据两种类型进行转换。
执行初始分配时,例如
$a = 3;
$b = "3";
$c = false;
它着眼于语法。如果值是引号,那么它是一个字符串。如果该值是裸数,则它是一个数字。因此$a
包含一个数字,$b
包含一个字符串。 $c
包含一个布尔值,因为它是从布尔文字中分配的。
如果使用函数调用分配变量,则取决于函数返回的内容(例如substr
返回字符串);所有标准PHP函数都有它们在文档中指定的返回类型。
大多数时候,它在所有这些情况下的作用是直观地看起来&#34;正确&#34;从语法和可能的语义。
答案 1 :(得分:0)
对于第二个问题,您可以使用intval。
来自php.net,http://php.net/manual/en/function.intval.php
(PHP 4,PHP 5)
intval - 获取变量的整数值
int intval(mixed $ var [,int $ base = 10])
使用指定的基数返回var的整数值 转换(默认值为10)。不应该使用intval() 对象,因为这样做会发出E_NOTICE级别错误并返回1.