Sınıf özellikleri için izin verilen değerler veya aralıkları uygulamak için en az özensiz yolu

0 Cevap php

Ben bir sınıf var varsayımsal Say ...

class Main {

    $prop1 = 2;
    $prop2 = 23;
    ...
    $prop42 = "what";

    function __construct($arg_array) {
        foreach ($arg_array as $key => $val) {
            $this->$key = $val;
            }
        }
    }

Ben oluşturmak Say ve nesne ...


$attributes = array("prop1"=>1, "prop2"=>35235, "prop3"=>"test");
$o = new Main($attributes);

Kullanıcı tarafından sağlanan değilse varsayılan özellik değerleri için sağlanması açıktır. Ama ne nesne özellikleri için kullanıcı sağlanan değerlere keyfi sınırlarını zorlamak istiyorsanız? Ben zorlamak istiyorsanız $prop1 int, en az 1 olması, ve 5'ten fazla olması olması. Ve ne, $prop42 türünde olmak string, no 'A' den daha az, ve "Z" 'den büyük olmayan? Bu amaçla, ne herhangi bir olası dil özelliğini veya hile kullanarak, olabildiğince kısa ve tatlı olarak komut tutarak, temiz yolu olurdu?

I __construct() böylece gibi yerleşik bir kural dizisine karşı verilen değerleri kontrol sıkışmış ediyorum ...

$allowable = array(
    "prop1" => array(
        'type' => 'int',
        'allowable_values' => array(
            'min' => 1,
            'max' => 5
            )
        ),
    "prop2" => array(
        'type' => 'int',
        'allowable_values' => array(
            1,
            235,
            37,
            392,
            13,
            409,
            3216
            )
        ),
    ...
    "prop42" => array(
        'type' => 'string',
        'allowable_values' => array(
            'min' => 'A',
            'max' => 'Z'
            )
        )
    );

Eğer prop2, benim doğrulama işlevi ben aralıkları sadece hesaba gibi pek çok 'o-yineleme ise-yine' blokları ile oldukça dağınık almaya başlıyor ama gördüğünüz gibi izin verilen bir değerler listesi . Doğrulama kodu ve bu kural dizi ile, benim komut dosyası oldukça hacimli oluyor.

Soru, nasıl özellik yelpazesi ve değer uygulanmasını sağlamak için mümkün olduğunca kısa ve özlü olmak benim sınıf veya sınıf özelliklerini veya doğrulama kodu veya benim komut herhangi bir diğer yönü yapısı olabilir mi? Daha zarif bu işlemek için bir dil özellik veya hile var mı? Ben, bu dilin sınırını bir tuğla duvar ulaştı mı? Kolayca bazı ipucu sağlayabilir, bu uygulamaya diğer dillerden herhangi bir örnek var mı?

0 Cevap