Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba,
$variable = null ise
$variable->property yaptığımda hata alıyorum. Bu durumda da null vermesini istiyorum,
$variable ? $variable->property : null ;

ile durumu kurtarmak istemiyorum. Her variable için bu condition'ı yazmak çok zahmetli oluyor
Bundan kurtulmak için bir çareniz var mıdır?

Normalde aşağıdaki gibi hata yonetimi yapıp ne return edeceğini set edebiliyoruz fakat sonuçta hata oluştuğundan sayfanın çalışması duruyor. Onun için ne yapılabilir bilmiyorum.

function BadMethodCallException($exception) {
  echo "sdsdf";
}

set_exception_handler('BadMethodCallException');

$x= null;
echo $x->method() . "değer";
6 ay sonra

Aslında en iyi cevabın şu olduğunu farkettim;

$variable->property ?? null,

  • değer null ise hata vermiyor ve doluysa değeri basıyor

    kanfur Şunu nasıl yazacaksınız mesela?

    optional($this->created_at)->toDateTimeString()

      mgsmus
      bu şekilde de aynı olacaktır
      $this->created_at->toDateTimeString() ??

        Yanlışlıkla sildim.
        $variable->property??
        "ya değerini ya da null döner"
        Bence bu daha akılda kalıcı ve aynı cevabı olan pratik yol olurdu

        kanfur Bu şekilde yaptığınızda $this->created_at null ise Call to a member function... hatası alırsınız çünkü null->toDateTimeString() yapmış oluyorsunuz. Şöyle yapmanız gerekecek:

        $this->created_at ? $this->created_at->toDateTimeString() : null

        ki bu eğer $this->created_at bir Carbon objesi ise geçerli. Carbon objesi olduğunu bilmiyorsanız da şöyle yapmanız gerekecek:

        $this->created_at instanceof Carbon ? $this->created_at->toDateTimeString() : null

        Operatör kullanırken soldan sağa doğru işleme alınır. $this->created_at->toDateTimeString() ?? null yaptığınızda önce $this->created_at->toDateTimeString() kısmı işleme alınır, orada hata alacağınız için ?? dan sonrasına zaten geçemez.

          mgsmus şu şekilde test ettim ve çalışıyor.

          $model->user_id = $user->id ?? null,
          $model->save()
          eğer $user null ise $user->id alamayacağı için hata vermesi gerekiyordu ancak vermeyip null olarak kaydediyor.
          $user dolu ise user->id değerini alıp kaydediyor. Bundan benzeterek sizin verdiğiniz örnekle örtüştüğü için çalışacağını düşündüm ve öyle olması gerekiyor. Yanılıyor muyum?

          ?? işareti php'nin nimeti optional() ise laravelin nimeti ikisi de aynı amaca hizmet ettiğini düşünüyorum

            kanfur Siz sadece int, string, null gibi basit tipler üzerinde kullanıyorsunuz. Onlar için kullanın onda sıkıntı yok. Şunu deneyin mesela:

            $user = null;
            $model->user_id = $user->getUserId() ?? null,

            sonra da şunu deneyin:

            $user = null;
            $model->user_id = optional($user)->getUserId() ?? null,

            Güzel bir örnek oldu,
            buraya resmi bırakıyorum meraklısı varsa inceleyebilir ...