php如何确定变量所需的内部类型?

时间:2015-02-20 09:28:26

标签: php types casting internals

这是一个关于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转换或其他东西进行某种字符串处理?

2 个答案:

答案 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.