Boş üye değişkenler için nesneyi kontrol etmek için etkili bir yöntemdir?

2 Cevap php

Ben sadece bir kez tüm üye değişkenler bir değer atanmış birincil işlevini yerine bir veri işlemcisi sınıf vardır:

class {
    public $firstName;
    public $lastName;
    public $ssn;
    public $accessKey;

    public function __construct($data = null) {
        if (is_array($data)) {
            // Assign the value of any fields in $data to
            // the corresponding member var
        }
    }

    public processData() {
        // *** CHECK IF ALL PROPERTIES HAVE VALUES ***
        foreach ($this as $p=>$val) {
            if ($val === null) {
                return false;
            }
        }

        doStuff();
    }
}

Tüm özellikleri bir değere sahip olduğunu doğrulamak için daha verimli ya da zarif bir yolu var mı? O bu şekilde yapmak için PHugly tür hisseder.

2 Cevap

Peki i _isValid() gibi korunan bir yöntemle kontrolleri saklanması istiyorum ve daha sonra yapılacak jsut

public function process()
{
  if($this->_isValid())
  {
     $this->doStuff();
     return true;
  }

  // otherewise throw an exception or otherwise alter control flow return values
}

Yerine bireysel üye değişkenleri kullanarak ... Bu - _requiredValues ve _values için biri için bir değişken eklemek ve bunları hem diziler var olacaktır tha GÜNCEL yapmak için başka bir şey daha şık kontrol yolu tercih ederseniz, bir dizi karşılaştırma işlevini kullanarak bunları toptan kontrol edebilirsiniz.

Eğer bireysel değerleri kolay erişim istiyorsanız sadece `halk gibi bir alıcı ekleyebilirsiniz

function getValue($value) 
{ 
    return isset($this->_values[$value]) 
       ? $this->_values[$value] 
       : null; 
}

Tüm diğer sınıf üyeleri, örneğin dahil olmadan üzerlerine yineleme böylece bir diziye sınıf üyelerini koyabilirsiniz:

<?php

class Test
{

    public $options = array
    (
        'firstname' => NULL,
        'lastname' => NULL,
        'ssn' => NULL,
        'accesskey' => NULL,
    );

    public function __set($key, $val)
    {
        if (empty($val) === FALSE AND array_key_exists($key, $this->options))
        {
            $this->options[$key] = $val;
        }
        else
        {
           // Throw an exception
           throw new Exception('Empty value');
        }

        return;
    }

    public processData()
    {
        doStuff();
    }            
}

Senin kodunda bir hata var, sen "ProcessData" on "fonksiyonu" sözdizimi unuttum.

Ben de boş bir değer ayarladığınızda bir hata atar __ set yöntemi oluşturduk. Örneğin

<?php

$test = new Test;

try
{
    // Throws an error
    $test->firstname = NULL;
} 
catch(Exception $e)
{ 
   var_dump($e);
}

try
{
    // Works fine
    $test->firstname = 'Brian';
} 
catch(Exception $e)
{ 
   var_dump($e);
}