首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Zend Framework InArray 驗證器:白名單成員資格檢查的標準實現

     編輯:PHP 相關知識

Zend_Validate_InArray 提供開箱即用的「值是否存在於陣列」驗證,適用於下拉選單、權限代碼、狀態碼等白名單場景。本文展示完整使用範例與進階選項。

基本用法

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Validate");
Zend_Loader::loadClass("Zend_Validate_InArray");

function check_inarray($person) {
    $allowed = ['張三', '李四', '王五', '趙六', '田七'];
    $validator = new Zend_Validate_InArray($allowed);

    if ($validator->isValid($person)) {
        echo "有這個人!";
    } else {
        echo "沒這個人!";
    }
}

check_inarray('張三');  // 輸出:有這個人!
check_inarray('路人甲'); // 輸出:沒這個人!

建構子選項詳解

new Zend_Validate_InArray(
    array $haystack,     // 白名單陣列(必填)
    bool  $strict = false, // 嚴格模式:true 時型別也必須相同
    int   $recursive = 0   // 遞歸深度:>0 時檢查多維陣列
);

進階範例:嚴格模式與多維陣列

<?php
// 嚴格模式:'123' (string) 不等於 123 (int)
$strictValidator = new Zend_Validate_InArray([1, 2, 3], true);
var_dump($strictValidator->isValid('1')); // false
var_dump($strictValidator->isValid(1));   // true

// 多維陣列遞歸檢查
$multi = [
    'fruits'  => ['apple', 'banana'],
    'colors'  => ['red', 'blue']
];
$recursiveValidator = new Zend_Validate_InArray($multi, false, 1);
var_dump($recursiveValidator->isValid('apple')); // true
var_dump($recursiveValidator->isValid('green')); // false

常見應用場景

  • 表單下拉驗證:確保提交值在選項範圍內,防範竄改。
  • 權限/角色代碼校驗:僅允許預定義角色代碼通過。
  • 狀態機流轉檢查:驗證狀態碼轉移合法性。
  • API 參數白名單:限制排序欄位、過濾器類型等可選值。

效能提示

  • 白名單陣列較大(>1000 元素)時,建議預先轉為 array_flip 後用 isset() 判斷,或改用 Zend_Validate_Callback 自定義高效邏輯。
  • 避免在循環中重複實例化驗證器,靜態緩存或依賴注入複用。

Zend_Validate_InArray 以極簡介面封裝了常見的白名單邏輯,配合嚴格模式與遞歸檢查,覆蓋 90% 以上的成員資格驗證需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved