PHP 中的列舉


什麼是 PHP?

PHP(超文字預處理器)是一種流行的指令碼語言,專為網頁開發而設計。它被廣泛用於建立動態和互動式的網頁。PHP 程式碼可以直接嵌入到 HTML 中,允許開發人員無縫地混合 PHP 和 HTML。PHP 可以連線到資料庫、處理表單資料、生成動態內容、處理檔案上傳、與伺服器互動以及執行各種伺服器端任務。它支援各種 Web 開發框架,例如 Laravel、Symfony 和 CodeIgniter,這些框架提供了構建 Web 應用程式的其他工具和功能。PHP 是一種開源語言,擁有龐大的社群、豐富的文件以及豐富的庫和擴充套件生態系統。

什麼是列舉?

列舉是在程式語言中常見的一種資料型別,允許您定義一組命名值。列舉提供了一種表示固定常量集的方法,這些常量通常用作程式碼中的選項或選擇。它們使您的程式碼更具可讀性、自解釋性,並透過限制變數可以取的值來幫助防止錯誤。

雖然 PHP 沒有原生列舉,但您可以使用不同的方法模擬列舉,例如使用類常量或抽象類,這些方法可以在一定程度上為您的常量值提供封裝和組織,但它們不提供其他語言中原生列舉的全部功能和型別安全性。

使用抽象類

示例

<?php
// PHP program to demonstrate the use of encapsulated constants
// Encapsulating constants
abstract class MyEnum {
   const VALUE1 = "Haveesh";
   const VALUE2 = 1;
   const VALUE3 = ['a' => 1, 'b' => 2];
}

$a = MyEnum::VALUE1;
$b = MyEnum::VALUE2;
$c = MyEnum::VALUE3;
var_dump($a);
var_dump($b);
var_dump($c);
?>

輸出

string(7) "Haveesh"
int(1)
array(2) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
}

透過擴充套件抽象類

示例

<?php
// PHP program to show use of enumerations

// Base enumeration class
abstract class Enum {

   // Enumeration constructor
   final public function __construct($value) {
      $this->value = $value;
   }

   // String representation
   final public function __toString() {
      return $this->value;
   }
}

// Encapsulating enumerated constants
class test extends Enum {
   const dummy_string = "Hasvitha";
   const dummy_int   = 1;
   const dummy_array  = array('a' => 1, 'b' => 2);
}

$a = new test(test::dummy_string);
$b = new test(test::dummy_int);
$c = new test(test::dummy_array);

var_dump($a);
var_dump($b);
var_dump($c);

?>

輸出

object(test)#1 (1) {
  ["value"]=>
  string(8) "Hasvitha"
}
object(test)#2 (1) {
  ["value"]=>
  int(1)
}
object(test)#3 (1) {
  ["value"]=>
  array(2) {
    ["a"]=>
    int(1)
    ["b"]=>
    int(2)
  }
}

新增異常處理

示例

<?php
// PHP program to show use of enumerations
  
// Base enumeration class
abstract class Enum {
  
   // Enumeration constructor
   final public function __construct($value) {
      try {
         $c = new ReflectionClass($this);
  
         // Content validation
         if(!in_array($value, $c->getConstants())) {
            try {
               throw new 
               Exception("IllegalArgumentException");
            }
            catch (Exception $S) {
               echo $S->getMessage();
            }
         }
         $this->value = $value;
      }
      catch (Exception $S){
         echo $S->getMessage();
      }
   }
  
   // String representation
   final public function __toString() {
      return $this->value;
   }
}
  
// Encapsulating enumerated constants
class example extends Enum {
   const dummy_string = "John Martin";
   const dummy_int   = 1;
   const dummy_array  = array('a' => 1, 'b' => 2);
}
  
$a = new example(example::dummy_string);
$b = new example(example::dummy_int);
$c = new example(example::dummy_array);
$d = new example(1.414);
  
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
?>

輸出

IllegalArgumentExceptionobject(example)#1 (1) {
  ["value"]=>
  string(11) "John Martin"
}
object(example)#2 (1) {
  ["value"]=>
  int(1)
}
object(example)#3 (1) {
  ["value"]=>
  array(2) {
    ["a"]=>
    int(1)
    ["b"]=>
    int(2)
  }
}
object(example)#4 (1) {
  ["value"]=>
  float(1.414)
}

結論

列舉是表示一組固定命名常量的寶貴工具,可以增強程式碼的可讀性和可維護性。雖然 PHP 缺少原生列舉支援,但可以使用替代方法來模擬列舉,例如使用類常量或抽象類。這些方法為常量值提供了封裝和組織。但是,它們不提供其他程式語言中發現的原生列舉的全部功能和型別安全性。儘管存在此限制,但在 PHP 中利用列舉(無論是透過解決方法還是未來的原生支援),都可以提高程式碼清晰度、減少錯誤並促進使用常量值的意圖表達。

更新於:2023-07-28

100 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.