簡體   English   中英

PHP如何有條件地分配類屬性變量

[英]PHP how to assign class property variables conditionally

我是php類,數組等的新手,所以如果我不使用正確的術語,請原諒。 我正在尋找的是如何輕松地為類中的屬性賦值,而不必依賴於“if”語句。

例如:

假設我有一個類測試的實例,“test”有一個屬性“employee”(希望這是調用它的正確方法),而employee是一個復雜的類型。

所以,我有類似的東西:

$test -> employee = array('Age' => '30', 'Sex' =>$sex, 'nationality'=>$nationality, 'maritalstatus'=>$status, etc, etc)

我在這里遇到的問題是,如果“年齡”,“性別”,“國籍”等並不總是存在,我只想在分配某些東西時為它們分配值,我不想使用If的對於每個非空值組合......(這是一個簡短的例子,但我有很多這些屬性或者它們被稱為什么,太多“如果”組合太亂了)......

我稍后將這些值作為soap請求發送,我不想要任何空的xml標簽......

如果我的術語不正確,我很抱歉,但我希望我已經足夠清楚了解那里有人來幫助我!

提前謝謝,巴勃羅

在這種情況下你可以做什么:

  • 使員工成為私人屬性
  • 定義需要提供所有參數的“setter”方法setEmployee

這是一些示例代碼; 試試這個:

    <?php

    class test{

        private $employee;

        public function setEmployee($age,$sex,$nationality,$maritalstatus){
            $this->employee=array('Age'=>$age,
                            'Sex'=>$sex,
                            'Nationality'=>$nationality,
                            'MaritalStatus'=>$maritalstatus);
        }

        public function getEmployee(){
            return $this->employee;
        }
    }


    $t=new test();
    $t->setEmployee('32','M','American','Married');

    print_r($t->getEmployee());
    ?>

這個怎么樣:

$array = array('Age' => '30' , 'Sex' => $sex, 'nationality' => $nationality, 'maritalstatus' => $status);
foreach ($array as $key => $value) { 
    if (is_null($value) || $value=="") { 
        unset($array[$key]); 
    } 
}
$test->employee = $array;

你考慮過一個簡短的三元解決方案嗎?

'Sex' => ( isset($sex) ? $sex : "n/a" )

這基本上是執行if-else邏輯,但不是那么冗長。 我們的條件是isset($sex) 如果這是真的,我們返回$sex ,否則我們返回"n/a" 無論返回什么,都會成為'Sex'的價值。

如果這還不夠,我建議您在實例化期間要求有效值。 如果用戶未提供正確和期望的值,請拒絕實例化該類。

$temp_array = array('Age' => '30', 'Sex' =>$sex, 'nationality'=>$nationality, 'maritalstatus'=>$status, etc, etc);

foreach($temp_array as $key => $val){
 if(!$temp_array[$key]){
  unset($temp_array[$key];
 }
}

如果你需要接受FALSE作為值,那么請改用:

$temp_array = array('Age' => '30', 'Sex' =>$sex, 'nationality'=>$nationality, 'maritalstatus'=>$status, etc, etc);

foreach($temp_array as $key => $val){
 if($temp_array[$key] !== NULL){
  unset($temp_array[$key];
 }
}

編輯:這可確保最終數組中只存在具有非null或非falsey值的鍵。

一種方法是將可能的密鑰存儲在一個數組中 - 然后你可以迭代它,每個數組只需要一組控制代碼:

$keys = array('Age', 'Sex', 'Nationality');

foreach ($keys as $key) {
  if ( isset($inputs[$key]) )
    $test->employee[$key] = $inputs[$key];
}

我對你的問題感到困惑。 諸如$ sex,$ nationality等變量是不是總是被定義,或者它們有時被設置為null? 如果這些變量並不總是存在,則必須首先檢查它們的存在,並且沒有辦法解決這個問題 - 除非你重構早期的代碼。

我假設變量確實存在,你只是不想保存NULL情況。

OOP方法可能是使用數據封裝 - 這種情況的常見選擇。 應對測試類進行以下更改。

class test {

  protected $employee = array();

  public function getEmployee() {
    return $this->employee;
  }

  public function setEmployee($employee) {
    foreach ($employee as $key => $value) {
      if ($value !== null) {  // or any value it should not be
        $this->employee[$key] = $value;
      }
    }
  }

...

另一種方法是將employee作為自己的對象引入,並在其對象中使用機制來跳過null值。 您可以覆蓋__set,再次使用數據封裝,獲取__construct參數或其他各種解決方案。

暫無
暫無

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

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