Php 简明教程

PHP - Type Casting

术语 "类型转换" 指的是将一种类型的数据转换为另一种类型。由于 PHP 是弱类型语言,解析器在执行某些操作时会将某些数据类型强制转换为其他类型。例如,如果一个带有数字的字符串是加法运算中涉及的运算符之一,则它将转换为整数。

Implicit Type Casting

下面是一个强制或隐式类型转换的示例:

<?php
   $a = 10;
   $b = '20';
   $c = $a+$b;
   echo "c = " . $c;
?>

在这种情况下,$b 是一个字符串变量,被转换为整数以启用加法。它将生成以下 output

c = 30

我们再来看另一个示例。这里,整数变量 $a 被转换为一个字符串,以便与一个字符串变量连接。

<?php
   $a = 10;
   $b = '20';
   $c = $a.$b;
   echo "c = " . $c;
?>

它将生成以下 output

c = 1020

除了此类强制类型转换之外,还有其他方法可将一种类型的数据显式转换为另一种类型。为此,您可以使用 PHP 的类型转换运算符或类型转换函数。

Type Casting Operators

若要将一个类型的表达式转换为另一个类型,您需要在表达式前面的括号中放入后一个类型的数据类型。

$var = (type)expr;

PHP 中的某些类型转换运算符为 −

  1. (int) 或 (integer) 转换为整数

  2. (bool) 或 (boolean) 转换为布尔

  3. (float) 或 (double) 或 (real) 转换为浮点数

  4. (string) 转换为字符串

  5. (array) 转换为数组

  6. (object) 转换为对象

Casting to Integer

您可以轻松地将浮点值转换为整数。看看以下 example

<?php
   $a = 9.99;
   $b = (int)$a;
   var_dump($b);
?>

它将生成以下 output

int(9)

请注意,浮点值不会四舍五入到最接近的整数;它只会返回整数部分。

String to Integer Conversion

(int) 运算符还会将字符串转换为整数。如果字符串仅由数字组成,则转换非常简单。

<?php
   $a = "99";
   $b = (int)$a;
   var_dump($b);
?>

在这里,你会得到以下 output

int(99)

即使字符串包含浮点数,(int) 运算符也会仅返回整数部分。

现在我们再举一个例子来理解一个特殊情况。 If the string is alphanumeric, casting with (int) works differently

  1. 如果字符串以数字开头,后面跟着非数字字符,则只会考虑初始数字。

  2. 如果字符串以非数字字符开头,并且数字位于中间,则强转运算符返回“0”。

看看以下 example

<?php
   $a = "10 Rs.";
   $b = (int)$a;
   var_dump($b);

   $a = "$100";
   $b = (int)$a;
   var_dump($b);
?>

它将生成以下 output

int(10)
int(0)

Casting to Float Type

您可以使用 (float) 或 (double) 强转运算符将变量或表达式显式转换为浮点数。

<?php
   $a = 100;
   $b = (double)$a;
   var_dump($b);
?>

它将生成以下 output

float(100)

包含任何有效数字表示的字符串都可以使用强转运算符转换为浮点类型。

<?php
   $a = "100";
   $b = (double)$a;
   var_dump($b);

   $a = "9.99";
   $b = (float)$a;
   var_dump($b);
?>

在这里,你会得到以下 output

float(100)
float(9.99)

即使字符串嵌入了浮点的科学计数法,该字符串也会转换为浮点。看看下面的例子 −

<?php
   $a = "1.23E01";
   $b = (double)$a;
   var_dump($b);
   $a = "5.5E-5";
   $b = (float)$a;
   var_dump($b);
?>

它将生成以下 output

float(12.3)
float(5.5E-5)

所有浮点数后边的非数字字符均被忽略。类似的,如果字符串以任何一个非数字字符开头,则会转换为“0”。见以下的 example

<?php
   $a = "295.95 only";
   $b = (double)$a;
   var_dump($b);

   $a = "$2.50";
   $b = (float)$a;
   var_dump($b);
?>

它将生成以下 output

float(295.95)
float(0)

Casting to String Type

通过使用一个强制类型转换操作符,任何求值为一个浮点数或整数的表达式都可以强制转换为一个字符串类型。下面给出几个示例−

<?php
   $a = 100;
   $b = (string)$a;
   var_dump($b);

   $x = 55.50;
   $y = (string)$x;
   var_dump($y);
?>

您将获得以下内容 output

string(3) "100"
string(4) "55.5"

Casting to Bool Type

任何非零数字(可以是整数或浮点数)使用 (bool) 操作符强制转换为 true。求值为“0”的表达式返回 false。字符串始终强制转换为 true。

看看以下 example

<?php
   $a = 100;
   $b = (bool)$a;

   $x = 0;
   $y = (bool)$x;

   $m = "Hello";
   $n = (bool)$m;

   var_dump($b);
   var_dump($y);
   var_dump($n);
?>

它将生成以下 output

bool(true)
bool(false)
bool(true)

Type Casting Functions

PHP 包含用于执行类型强制转换的以下内置函数−

  1. intval()

  2. floatval()

  3. strval()

让我们详细讨论这些内置函数。

The intval() Function

这个函数获取一个变量的整数值。

intval(mixed $value, int $base = 10): int

$base 参数默认为 10,这意味着该值转换为十进制数。

  1. 如果值为一个浮点数,则 intval() 函数返回一个整数,抛弃小数部分。

  2. 一个数字的字符串表示返回一个对应的整数,抛弃小数部分(如果存在的话)。

  3. 如果值为一个带有有效八进制数的字符串,并且基数为 8,则 intval() 函数返回一个对应的八进制数。

When the base is "0" ,值的转换基于字符前缀。

  1. 如果值以 0X 或 0x 开头,则返回一个十六进制数。

  2. 如果值以 0B 或 0b 开头,则返回一个二进制数

  3. 如果值以 0 开头,则该函数返回一个八进制数。

intval() 函数对于 true,返回 1,对于 false 布尔值,返回 0。

Example

下面的示例展示了 intval() 函数的工作方式−

<?php
   echo intval(42). PHP_EOL;
   echo intval(4.2). PHP_EOL;
   echo intval('42') . PHP_EOL;

   echo intval(042) . PHP_EOL;         # 0ctal number
   echo intval('042', 0) . PHP_EOL;    # 0ctal number
   echo intval('42', 8) . PHP_EOL;     # octal

   echo intval(0x1A) . PHP_EOL;        # Hexadecimal
   echo intval('0x1A', 16) . PHP_EOL;  # Hexadecimal
   echo intval('0x1A', 0) . PHP_EOL;   # Hexadecimal

   echo intval(false) . PHP_EOL;
   echo intval(true) . PHP_EOL;
?>

它将生成以下 output

42
4
42
34
34
34
26
26
26
0
1

The floatval() Function

floatval() 函数获取一个表达式的浮点值。

floatval(mixed $value): float

该值可能是一个任意的标量变量。带有非数字字符的字符串返回“0”。带有数字表示或带有一个数字表示起始子串的字符串返回对应的数字。下面的 example 展示了 floatval() 函数的工作方式 −

<?php
   echo floatval(42). PHP_EOL;
   echo floatval(4.2). PHP_EOL;
   echo floatval('42') . PHP_EOL;

   echo floatval('99.90 Rs') . PHP_EOL;
   echo floatval('$100.50') . PHP_EOL;
   echo floatval('ABC123!@#') . PHP_EOL;

   echo (true) . PHP_EOL; ;
   echo (false) . PHP_EOL;
?>

它将生成以下 output

42
4.2
42
99.9
0
0
1

doubleval() 函数是 floatval() 函数的一个别名,因此返回类似的结果。

The strval() Function

strval() 函数获取变量的字符串值。此函数不对返回的值执行任何格式化。

strval(mixed $value): string

正在转换为字符串的值可以是任何标量类型、null 值或实现了 __toString() 方法的对象。查看以下内容:

<?php
   echo strval(42). PHP_EOL;
   echo strval(4.2). PHP_EOL;
   echo strval(4.2E5) . PHP_EOL;

   echo strval(NULL) . PHP_EOL;

   echo (true) . PHP_EOL;
   echo (false) . PHP_EOL;
?>

它将生成以下 output

42
4.2
420000

1

以下内容定义了一个实现了 __toString() 方法的类:

<?php
   class myclass {
      public function __toString() {
         return __CLASS__;
      }
   }
   echo strval(new myclass);
?>

在这里,你会得到以下 output

myclass