PHP 8.1'de salt okunur özellikler nasıl kullanılır - CloudSavvy BT
Web ajansı » Dijital haberler » PHP 8.1'de salt okunur özellikler nasıl kullanılır -

PHP 8.1'de salt okunur özellikler nasıl kullanılır -

PHP 8.1, bir readonly sınıf özelliklerinde değiştirici. Bu şekilde işaretlenen bir özellik yalnızca bir kez tanımlanabilir. Başlatmadan sonra salt okunur bir özelliğin değerini değiştirmeye çalışmak bir hata üretecektir.

"Salt okunur", bireysel programlama dilleri için çeşitli etkileri olan oldukça gevşek bir terimdir. Bu bağlamda, "salt okunur" aslında "değişmez" anlamına gelir: bir özelliğin değerini ayarlayabilirsiniz, ancak daha sonra değiştirilemez.

Salt okunur özellikleri yazma

Ekle readonly bir özelliği salt okunur yapmak için değiştirici. Özelliğin erişim değiştiricisi ile tür göstergesi arasına yerleştirilmelidir.

sınıf Gösteri {
 
    halka açık dizi $ Değişken;
 
    halka açık salt okunur dize $ Değişmez;
 
    halka açık işlev __yapı(
        dizi $ Değişken,
        dizi $ Değişmez) {
 
        bu $ -> Değişken = $ Değişken;
        bu $ -> değişmez = $ Değişmez;
    }
 
}

$Mutable sıradan bir kamu yararıdır. Değerini istediğiniz zaman sınıf yöntemlerinde veya dışarıdan değiştirebilirsiniz:

$ demo = yeni Gösteri("A", "X");
$ demo -> Değişken = "B";

$Immutable biraz farklıdır. Değerini her zaman istediğiniz zaman okuyabilirsiniz, ancak herhangi bir değişiklik başarısız olacaktır. Error:

// Hata Atıyor
$ demo -> değişmez = "Y";

Le readonly değiştirici, terfi edilen kurucu özelliklerinde de desteklenir:

sınıf Gösteri {
    halka açık işlev __yapı(
        halka açık salt okunur dize $ Değişmez="foobar"
    ) {}
}

Yükseltmeyi varsayılan bir değerle kullanırken, özelliği yine de yapıcınızda manuel olarak ayarlayabilirsiniz. Bu fonksiyon parametresi özellik örneğini değil, varsayılanı alır. Önceki örnekte gösterilen aynı kodda şeker teşviki.

Uyarılar

Salt okunur özellikler, uygun gördüğünüz şekilde benimseyebileceğiniz basit bir sözdizimi geliştirmesidir. Geriye dönük uyumluluk etkileri yoktur ve kullanımları tamamen isteğe bağlıdır. Bunları eklemeye başlıyorsanız, bilmeniz gereken birkaç uyarı ve sınırlama vardır.

Klasik özelliklerin aksine, salt okunur özelliklerin tanımlarında varsayılan bir değere sahip olmalarına izin verilmez:

sınıf Gösteri {
    korumalı salt okunur dize $ foo = "Çubuk";
}

Bu talimat tanımlar ve başlatır $foo. Başlattıktan sonra değerini değiştiremezsiniz, bu nedenle özellik aslında bir sabittir. Bu nedenle, varsayılanlar yasaktır ve bunun yerine gerçek bir sabit kullanmalısınız:

sınıf Gösteri {
    const foo = "Çubuk";
}

Bu kısıtlamanın ardından, readonly mekanik olarak seulement yazılan özelliklerde desteklenir. Aşağıdaki mülkün geçersiz bir tanımı var:

sınıf Gösteri {
    korumalı Sadece oku $ foo;
}

Türlenmemiş bir özellik, örneğin $foo yukarıda, örtük bir varsayılan var null. Evet readonly izin verildi, "örtülü sabit yok" kuralı yeniden ortaya çıktı. Yazılan özellikler, "başlatılmamış" ve "boş" durumları birbirinden ayırır, böylece siz açıkça bir tane tanımlayana kadar herhangi bir değer olmadan var olurlar.

Salt okunur değiştirici, sınıf mirasının bir parçası olarak kullanıldığında özel kurallara sahiptir. Alt sınıflar eklenemiyor veya kaldırılamıyor readonly ebeveynleri tarafından tanımlanan özellikler hakkında.

Yazılabilir bir özellik oluşturun readonly yöntemleri değeri mutasyona uğratırsa, üst sınıfı bozar. Kısıtlamanın kaldırılması görünüşte zararsız olsa da, RFC readonly kalıtım geçersiz kılmalarına izin verilirse kaybedilecek yetenekler üzerinde "kasıtlı bir kısıtlama" olarak. Bu, ebeveyn sınıfların, salt okunur olması gereken özellikleri değiştirerek çocukların yan etkilere neden olamayacağını iddia edebilmesi için yasaktır.

Salt okunur özellikler yalnızca ayarlandıkları kapsamda ayarlanabilir. Bu demektir public özellikler, daha önce başlatılmamış olsalar bile, bir sınıfın dışından ayarlanamaz:

sınıf Gösteri {
    halka açık salt okunur dize $ foo;
}
 
$d = yeni Gösteri();
$d -> foo = "Çubuk";  // yasadışı

Başlatma, özelliği tanımlayan sınıfta gerçekleşmelidir. Sonuç olarak, salt okunur özellikler, önceden var olan PHP özelliklerinin aksine, diğer programlama dillerinin değişmez alanlarına daha yakındır.

Le readonly değiştirici ayrıca tüm gönderiler için de geçerlidir. Dahili ve harici erişim arasında ayrım yapmaz. Gelecekteki bir belirtim uzantısı buna izin verse de, genel olarak salt okunur ancak sınıfta yazılabilir bir özelliğiniz olamaz.

Son bir tuzak, clone anahtar kelime. Bu kod çalışmayacak:

sınıf Gösteri {
    halka açık işlev __yapı(
        halka açık dizi $ foo
    ) {}
}
 
$d = yeni Gösteri("Çubuk");
$ d2 = clone $d;
$ d2 -> foo = "foobar";

Klonlama, geleneksel mülklere erişimle aynı kuralları izler. değişse bile foobar bu ilk kez foo üzerinde erişilebilir $d2, özellik klonlama işlemi tarafından zaten başlatıldı. Klonlama sırasında örtük bir başlatma var.

Salt okunur özellikler ne zaman kullanılır?

Salt okunur özellikler, veri yapılarını temsil eden basit sınıfların oluşturulmasını büyük ölçüde hızlandıracaktır. HTTP istek parametrelerini, veri aktarım nesnelerini ve yanıt verilerini tutmak için atılabilir sınıflar yazmak yaygındır. Bunlar genellikle değişmezdir ve özelliklerin sınıf oluşturulduktan sonra değişmemesi gerekir.

Önceden, struct türünde sınıflar yazarken iki çekici olmayan seçeneğiniz vardı: genel özellikleri kullanın, geliştirmeyi hızlandırın ancak değişikliğe izin verin veya korumalı özellikleri ortaya çıkarmak için elle alıcı yöntemleri ekleyerek zaman harcayın.

// İdeal değil - Özellikler harici olarak değiştirilebilir
sınıf Kullanıcı Oluşturma İsteği {
    halka açık işlev __yapı(
        halka açık dizi $ Kullanıcı adı,
        halka açık dizi $ Şifre
    ) {}
}
 
// İdeal de değil - Çok sayıda ortak kod
sınıf Kullanıcı Oluşturma İsteği {
    halka açık işlev __yapı(
        korumalı dizi $ Kullanıcı adı,
        korumalı dizi $ Şifre
    ) {}
 
    halka açık işlev getKullanıcı adı() : dizi {
        dönüş bu $ -> Kullanıcı Adı;
    }
 
    halka açık işlev şifre al() : dizi {
        dönüş bu $ -> Şifre;
    }
}

Salt okunur özellikler sonunda ideal yaklaşıma izin verir:

sınıf Kullanıcı Oluşturma İsteği {
    halka açık işlev __yapı(
        halka açık salt okunur dize $ Kullanıcı adı,
        halka açık salt okunur dize $ Şifre
    ) {}
}

Mülkler herkese açıktır ancak değiştirilemez. Yapıcı özelliklerinin tanıtımıyla birleştiğinde, salt okunur özellikler, ortak kod kodunu önemli ölçüde azaltmayı vaat ederek faydalı sınıfları daha hızlı yazmanıza olanak tanır.

readonly ayrıca kodun okunmasını kolaylaştırır ve niyetlerinizi daha iyi belirtir. Okuyan veya düzenleyen herkes UserCreationRequest sınıf, özelliklerinin değişmemesi gerektiğini bilir. İlk örnekte, projedeki başka bir kodun sınıfın özelliklerini doğrudan değiştirip değiştirmediğini bilmiyoruz. İkinci örnek biraz daha açıktır, ancak yine de bir geliştiriciyi fazlalıklar uygulamaya teşvik edebilir. setUsername() et setPassword() yöntemler.

Sonuç

Le readonly değiştirici, PHP sınıfı özellikleri için yerleşik değişmezlik desteği sağlar. Bu, kodunuzu daha net hale getirir ve çalışma zamanı değişmezliğini zorunlu kılarak kasıtsız değer değişikliklerini önler.

PHP 7 yayın serisine geri dönersek, yapı benzeri bir temel sınıf oluşturmak, yazılan özelliklerin ayarlanmasını, bu özellikleri tanımlayan bir kurucunun yazılmasını ve ardından bunun için alıcı yöntemlerinin eklenmesini içeriyordu. PHP 8.1 ile, tüm bunları birleştirerek tek bir kurucu imzasında toplayabilirsiniz. public readonly ve emlak promosyonu.

PHP 8.1'in en son geliştirme sürümlerinde salt okunur özellikler uygulanmaktadır. Üretime hazır versiyon Kasım 2021'de gelecek.

★ ★ ★ ★ ★