Yapıcıdan istisna atmalı mıyım?


46

PHP'deki kurucudan istisna atabileceğimi biliyorum ama yapmalı mıyım? Örneğin, bir parametrenin değeri beklediğim gibi değilse.

Veya bir yöntem çağrılıncaya kadar bir istisna atmayı ertelemeliyim. Her iki durumda da avantajlar ve dezavantajlar nelerdir?


soru şu ki, kullanıcılarınızın çirkin istisna hata mesajlarını görmesini ister misiniz?

15
@LawrenceCherone hayır, soru bu değil. Bir şey değil. Soru, ctor, nesneyi kendisine iletilen argümanlardan geçerli bir duruma getiremediğinde derhal bir istisna oluşturmak veya bu örnekte olası bir geçersiz durum ile çalışan bir yöntem çağrılıncaya kadar ertelemek olup olmadığıdır. Yine de programcılar için daha uygun.

4
@LawrenceCherone Haklısın. Hiçbir yazılım asla kasıtlı olarak başarısız olmamalıdır; Sadece devam etmeli ve ne olacağını görmeli. / s
user253751

@ immibis İyi alaycı iyidir.
kodeart

Bu harika bir soru !!! Bugüne kadar bu fikri hiç düşünmedim.
Rhys Johns

Yanıtlar:


75

İstisnaları atmayı neden erteledin?

Nesnenin verilen parametrelerle düzgün bir şekilde başlatılamayacağını biliyorsanız, kesinlikle bir istisna atmalısınız.

Aksi takdirde, birisi nesnenizi boş olarak test edebilir, ki bu olmayacak ve her şeyin beklendiği gibi gittiğini varsayabilir.

Üzerinde bir yöntem çağırmadan nesnenize yapılabilecek birçok şey var: bir listeye eklenebilir, karşılaştırılabilir, parametre olarak gönderilebilir, vb. Vb. Tüm bunlar şeylerdir. geçerli bir nesne olmadığı düşünülerek bu gerçekleşmemeliydi.


21

Yapıcınız hatalı parametrelerle çağrıldıysa, bir istisna atmanız gerekir (??). Bunu yapmazsanız, beklendiği gibi davranmayacak olan kötü bir nesne elde edebilirsiniz.


17

Kesinlikle!!

Nesneyi oluşturma parametreleri geçerli değilse veya sözleşmeye göre geçerli değilse istisna atmalısınız. Akış nesnesi neden olabilir kötü verilerle inşa bilerek devam ettirmeye iyi bir fikir değil birçok arayan başlaması için yeşil ışık eğer sorunlar.

Her zaman "HIZLI BAŞARI VE ERKEN BAŞARISIZ" dır.


7

PHP'deki kurucudan istisna atabileceğimi biliyorum ama yapmalı mıyım?

Nesne yapımının başarısız olduğunu bildirmenin tek akılcı yolu budur.


2

Nesnenizi başlatmadan önce parametre setini neden onaylamıyorsunuz? Bunu yapmak, objenizin yaratılmasını sağlayacaktır, böylece başarısızlığından doğabilecek etkilerden herhangi birini kaldırmak.

Yapıcınızdaki işleri kontrol edebileceğinizi ve istisnalar atabildiğinizi bilmeme rağmen, kurucularımı başarısız olmayacak şekilde yazmayı tercih ediyorum. Yapıcılarımın başarısız olmasına izin vermeden istisnaları atabileceğim nesneleri başlatmadan önce parametre doğrulaması yapıyorum. Ayrıca, genellikle yapıcılarımdaki yeni nesneleri başlatmaya çalışmıyorum, bunun yerine ihtiyaç duyduğumda onları başlatmayı seçiyorum.

Sadece benim görüşüm. PHP çok fazla özgürlük sunuyor - tadını çıkarın!


Bu cevabın neden reddedildiğinden emin değilim. Belirli (genellikle iş) kurallarına göre sınıflarınızı / işlevlerinizi tasarlamak için iyi bir yol olan nesne yapımından önce ( "bekçi" yöntemi ) parametre doğrulamasını kullanarak geçerli bir yaklaşım sağlar . Ayrıca OP'nin sorusuna doğrudan cevap vermezse, ancak bu hala iyi bir tavsiye :)
kodeart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.