簡體   English   中英

如何在 PHP function 中傳遞多個按位值?

[英]How can I pass multiple bitwise values in PHP function?

我有一個 function,其中包含多個參數,其中包含 True/False

function checkPersonStatus($isEmployed, $isResident, $isDisable, $isMarried)

我想將它們按位轉換,但值可以隨時為真或假。

我怎樣才能將多個值發送到我的新 function 可以像這樣使用按位?

CONST CHECKNONE = 0; CONST CHECKEMPLOYED = 1; CONST CHECKRESIDENT = 2; CONST CHECKDISABLED = 4; CONST CHECKMARRIED = 8; CONST CHECKALL = 15;

如何將這些值傳遞給我的舊 function 並檢查條件?

<?php

const CHECKNONE = 0; 
const CHECKEMPLOYED = 1;
const CHECKRESIDENT = 2;
const CHECKDISABLED = 4;
const CHECKMARRIED = 8;
const CHECKALL = 15;

function checkPersonStatus($isEmployed, $isResident, $isDisable, $isMarried, $checkBit)
{
    if (!is_bool($isEmployed) || !is_bool($isResident) || !is_bool($isDisable) || !is_bool($isMarried))
        throw new \Exception("Invalid argument parameter");
    
    $employed = $resident = $disable = $married = 0;
    
    if ($isEmployed && ($checkBit === CHECKEMPLOYED || $checkBit === CHECKALL))
        $employed = 1;
    if ($isResident && ($checkBit === CHECKRESIDENT || $checkBit === CHECKALL))
        $resident = 2;
    if ($isDisable && ($checkBit === CHECKDISABLED || $checkBit === CHECKALL))
        $disable = 4;
    if ($isMarried && ($checkBit === CHECKMARRIED || $checkBit === CHECKALL))
        $married = 8;
        
    $check = $employed | $resident | $disable | $married;
    
    return $check === $checkBit;
}

$checks = [
    'check_all_true' => checkPersonStatus(true, true, true, true, CHECKALL),
    'check_all_false' => checkPersonStatus(true, true, true, false, CHECKALL),
    'check_none_true' => checkPersonStatus(false, false, false, false, CHECKNONE),
    'check_none_false' => checkPersonStatus(true, false, false, false, CHECKNONE),
    'check_married_true' => checkPersonStatus(false, false, false, true, CHECKMARRIED),
    'check_married_true_with_other_bit' => checkPersonStatus(true, false, false, true, CHECKMARRIED)
];

var_dump($checks);

產出

array(6) {
  ["check_all_true"]=>
  bool(true)
  ["check_all_false"]=>
  bool(false)
  ["check_none_true"]=>
  bool(true)
  ["check_none_false"]=>
  bool(true)
  ["check_married_true"]=>
  bool(true)
  ["check_married_true_with_other_bit"]=>
  bool(true)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM