ASP.NET / C # mülkiyet niteliği sınıfı PHP version

6 Cevap

Böyle bir şey var mı?

Ben PHP böyle bir şey yapmak istiyorum ama ben PHP docs bunu nasıl göremiyorum:

public class User : ValidationBase
{  
  [NotNullOrEmpty(Message = "Please enter a user name.")] 
  public string UserName { get; set; } 
}

Ne arıyorum yukarıdaki örnekte özellik bildirimi yukarıda [NotNullOrEmpty(Message = "Please enter a user name.")] hattı tarafından anlamına bir ASP.NET / C # mülkiyet niteliğinin PHP eşdeğerdir.

6 Cevap

PHP özelliklerini beyan için yerleşik bir mekanizma var, ama bazı özel kodu kullanarak bu davranışı taklit etmek mümkündür. Temel fikir, bir açıklama bloğu içinde meta veri yerleştirebilirsiniz, ve o yorum bloğu ayrıştırır bir sınıf yazmak için. Eğer açıklamayı düzgün biçimlendirilmiş "bağlıyor" sağlamak gerekir, ama çalışır, çünkü bu C # daha az uygundur.

http://web.archive.org/web/20130302084638/http://interfacelab.com/metadataattributes-in-php/: İşte bunu yapmak için nasıl bir örnek

Hayır, en azından özgün PHP tarafından desteklenmez, yoktur.

Bunu, örneğin, formlar için doğrulama ile sağlayacak bir çerçeve kullanabilirsiniz. Zend Framework olmaları gerektiğini, ne tür alanların doldurulması zorunludur olmadığını belirtmek için izin Zend_Form sınıfı, ve bu durumda değilse görüntülemek için hata mesajı var.

Andy Wilson gelen kabul cevabı artık mevcut sayfalara bağlantılar. I http://web.archive.org/web/20130116184636/http://interfacelab.com/metadataattributes-in-php/ aracılığıyla sayfanın kendisi için başardı ama yazar anlamına gelir kodu indir çok ölü bir bağlantıdır.

Ben burada beri PHP Açıklamaların büyük bir uygulama buldum Ancak: https://github.com/mindplay-dk/php-annotations

Ben buldum sadece olumsuz şimdiye kadar bu dosya adları ve aynı ve same case Kod Ateşleyici ile hangi onlar değil ama olmanın sınıf isimleri dayanır olduğunu ben ben bu dışarı çalışmış bir kez yakında tüm çalışma vardı ve tabii ki bu sınırlama tüm uygulamaları etkilemez olmaz.

Böyle bir şey PHP var, aslında bunu kod gerekecek.

Bu gibi biraz, herhalde:

public function setUserName($str) {
    if (empty($str)) {
        throw new Exception('Please enter a user name.');
    }
    $this->userName = $str;
}

public function getUserName($str) {
    return $this->userName;
}

Bazı çerçeveler işlevsellik bu tür getirebilir düşünüyorum, ama PHP gibi yüksek düzeyli yapıları sağlamak için tasarlanmış değildir.

php özelliklerini ne de emlak nitelikleri yoktur.

Eğer php benzer bir şey yapmak istiyorsanız, size özel bir alan beyan etmek zorunda ve kamu alıcı ve ayarlayıcı yöntemleri yazmak ve ayarlayıcı yöntemi içinde boş kontrol çeşit yapardım.

class User extends ValidationBase
{
    private $userName;
    public function GetUserName()
    {
        return $this->userName;
    }
    public function SetUserName($val = '')
    {
        if ($val === '')
        {
            return false;
        }
        else
        {
            $this->userName = $val;
            return true;
        }
    }
}