Laravel
Optional sınıfı ve beraberindeki isteğe bağlı yardımcılar Laravel 5.5'te tanıtıldı. Bu sınıf, bu sinir bozucu önlemek için yararlıdır Kodunuzda
Trying to get property of non-object hataların
Trying to get property of non-object .
Joseph Sibler, Laravel 5.6.13'te ele aldığımız Laravel opsiyonel yardımcısına bir gelişme sunmuştur. Bu, şimdi sadece nesne
null olmadığında çağrılan bir kapanmaya izin vermektedir:
???? @laravelphp'deki "isteğe bağlı" yardımcı, null olabilecek bir nesneye güvenli bir şekilde çağrı yapmak için mükemmeldir. Ama yöntem gerçek nesnenin kendisinde değilse ne olur?
Peki şimdi "isteğe bağlı" bir kapatma geçebilir ve sadece belirtilen nesne boş değilse, sadece arayacaksınız ???? pic.twitter.com/0RIbUffuOY
– Joseph Silber (@joseph_silber) 5 Nisan 2018
Onun örneği,
optional() yardımcı aracının kullanımının, başka bir kaynaktan veri almak istediğiniz durumlarda, ancak yalnızca boş olmayan bir değerde kullanım durumları için biraz farklı olduğunu gösterir:
return optional(User::find($id), function ($user) {
return TwitterApi::findUser($user->twitter_id);
});
İsteğe bağlı ve Null Coalesce
Son zamanlarda, Blade şablonlarınızı Laravel 5.7 için hazırlanırken PHP7 boş birleştirme işleci için güncellemeyi yazdık, ancak
optional() hala, özellikle değeri yalnızca değerinizdeyken istediğiniz verilere erişebileceğiniz daha gelişmiş ihtiyaçlar için bir yer var. Null.
Peki,
optional() veya boş birleştirme işlecine ne zaman ihtiyaç duyarsınız?
Bir değer mevcut değilken yalnızca null döndürme ile ilgileniyorsanız, isteğe bağlı olarak gereksiz değildir:
// null coalesce
return $user->profile->twitter_id ?? null;
// optional
return optional($user->profile)->twitter_id;
İki kod örneği aynı şeyi gerçekleştirir. Ancak, açık bir şekilde boş değer döndürmeli ve tanımlanmamış bir
Undefined property uyarısından kaçınmak için boş birleştirme kullanılmalı ve ikinci örnek, değerin isteğe bağlı olarak kullanılabilir olduğuna dair niyetini gösterir.
Varsayılan bir değer istiyorsanız, boş birleştirme daha iyi bir seçimdir:
return $user->profile->nickname ?? randomNickname();
Seçeneğin hedefi, nesneyi kontrol etmek için ayrıntılı bir kod olmadan, null döndürmek ve işlemdeki nesne olmayan hatalardan kaçınmaktır.
Daha fazla bilgi edin
İsteğe bağlı yardımcısını ve yardımcı olabilecek diğer yararlı yardımcıları içeren, Hayatınızı Kolaylaştıracak Beş Laravel Yardımcıyı yazdık.
İsteğe bağlı konsept ile ilgili diğer kaynaklardan ilham almak isterseniz, Java'da (Java 8'de tanıtılan) bir Seçmeli sınıf bulunur ve bunlar null işaretçi istisnalarından kaçınmak için kullanılabilir. Java İsteğe Bağlı API'sı, keşfetmek isteyebileceğiniz bazı ilginç yöntemlere sahiptir.
Bir önceki yazımız olan Ubuntu'da Transporter ile MongoDB'den Elasticsearch'e Dönüştürülen Verileri Eşitleme 16.04 başlıklı makalemizi de okumanızı öneririz.