PHP - 型別轉換



“型別轉換”指的是將一種資料型別轉換為另一種資料型別。由於 PHP 是一種弱型別語言,解析器在執行某些操作時會將某些資料型別強制轉換為其他型別。例如,如果一個包含數字的字串是加法運算中的運算元之一,則該字串將轉換為整數。

隱式型別轉換

這是一個強制或隱式型別轉換的示例:

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

在這種情況下,$b 是一個字串變數,被強制轉換為整數以進行加法運算。它將產生以下輸出

c = 30

讓我們來看另一個例子。這裡,整數變數 $a 被轉換為字串,以便與字串變數連線。

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

它將產生以下輸出

c = 1020

除了這種強制型別轉換之外,還有其他方法可以顯式地將一種資料型別轉換為另一種資料型別。您可以為此目的使用 PHP 的型別轉換運算子或型別轉換函式。

型別轉換運算子

要將一種型別的表示式轉換為另一種型別,需要在表示式之前用括號括起來目標資料型別。

$var = (type)expr;

PHP 中的一些型別轉換運算子有:

  • (int) 或 (integer) 轉換為整數

  • (bool) 或 (boolean) 轉換為布林值

  • (float) 或 (double) 或 (real) 轉換為浮點數

  • (string) 轉換為字串

  • (array) 轉換為陣列

  • (object) 轉換為物件

轉換為整數

您可以輕鬆地將浮點值轉換為整數。請看下面的示例

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

它將產生以下輸出

int(9)

請注意,浮點值不會四捨五入到最接近的整數;而是隻返回整數部分。

字串到整數轉換

(int) 運算子也用於將字串轉換為整數。如果字串只包含數字,則轉換很簡單。

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

這裡,您將獲得以下輸出

int(99)

即使字串包含浮點數,(int) 運算子也只返回整數部分。

現在讓我們來看另一個例子來理解一個特例。如果字串是字母數字的,則使用 (int) 進行轉換的方式不同

  • 如果字串以數字開頭,後面跟著非數字字元,則只考慮初始數字。

  • 如果字串以非數字字元開頭,而數字在中間,則轉換運算子返回“0”。

請看下面的示例

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

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

它將產生以下輸出

int(10)
int(0)

轉換為浮點型別

您可以使用 (float) 或 (double) 轉換運算子將變數或表示式顯式轉換為浮點數。

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

它將產生以下輸出

float(100)

包含任何有效數字表示的字串都可以使用轉換運算子轉換為浮點型別。

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

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

這裡,您將獲得以下輸出

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);
?>

它將產生以下輸出

float(12.3)
float(5.5E-5)

浮點數後面的所有非數字字元都將被忽略。類似地,如果字串以任何非數字字元開頭,則字串將轉換為“0”。請看下面的示例

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

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

它將產生以下輸出

float(295.95)
float(0)

轉換為字串型別

透過使用轉換運算子,任何計算結果為浮點數或整數的表示式都可以轉換為字串型別。以下是一些示例:

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

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

您將獲得以下輸出

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

轉換為布林型別

任何非零數字(整數或浮點數)都將使用 (bool) 運算子轉換為 true。計算結果為“0”的表示式返回 false。字串始終轉換為 true。

請看下面的示例

<?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);
?>

它將產生以下輸出

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

型別轉換函式

PHP 包含以下用於執行型別轉換的內建函式:

  • intval()

  • floatval()

  • strval()

讓我們詳細討論這些內建函式。

intval() 函式

此函式獲取變數的整數值。

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

$base 引數預設為 10,這意味著該值將轉換為十進位制數。

  • 如果該值是浮點數,則 intval() 函式返回一個整數,丟棄小數部分。

  • 數字的字串表示形式返回相應的整數,忽略小數部分(如有)。

  • 如果值為包含有效八進位制數的字串且基數為 8,則 intval() 函式返回相應的八進位制數。

當基數為“0”時,值的轉換基於字元字首進行。

  • 如果值以 0X 或 0x 開頭,則返回十六進位制數。

  • 如果值以 0B 或 0b 開頭,則返回二進位制數。

  • 如果值以 0 開頭,則函式返回八進位制數。

intval() 函式對於 true 布林值返回 1,對於 false 布林值返回 0。

示例

以下示例演示了 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; 
?>

它將產生以下輸出

42
4
42
34
34
34
26
26
26
0
1

floatval() 函式

floatval() 函式獲取表示式的浮點值。

floatval(mixed $value): float

值可以是任何標量變數。包含非數字字元的字串返回“0”。包含數字表示或以數字表示作為起始子字串的字串返回相應的數字。以下示例演示了 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; 
?>

它將產生以下輸出

42
4.2
42
99.9
0
0
1

doubleval() 函式是 floatval() 函式的別名,因此返回類似的結果。

strval() 函式

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; 
?>

它將產生以下輸出

42
4.2
420000

1

以下示例定義了一個實現__toString() 方法的類。

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

這裡,您將獲得以下輸出

myclass
廣告