Nasıl farklı komut iki sınıf arasında bir $ bu başvuruyu korumak?

1 Cevap php

Tamam, bu biraz garip ama burada durum:

MVC bağlamda çalışıyorum

Ben bir kütüphane olarak (User.php) Kullanıcı sınıfını kullandık

Ve sonra kullanıcı (controller.php) girişini işleyen bir denetleyici sınıf var

Burada nasıl gidiyor:

  1. kullanıcı kayıtları
  2. registerhandler () denetleyicisi denir
  3. registerhandler () Kullanıcı sınıfta register () yöntemini çağırır
  4. register () yöntemi, bu $ ile bir kullanıcı örneği oluşturur ve bir belirteci döndürür ve denetleyici sınıfta bir verifyhandler bağlayan bir mesaj () yankıları
  5. verifyhandler aramalar Kullanıcı sınıfında () yöntemini doğrulayın
  6. doğrulayın () yöntemi, kayıt tarafından oluşturulan kullanıcı örneğini başvurmak için $ this kullanır ()
  7. boom! $ Artık bu (kayıt tarafından oluşturulan () metodu) aynı nesneye işaret değil!

Ben başvuru korumak istiyorsanız henüz o denetleyicisi geçirilen kez başka bir değer almak gibi görünüyor. Ben ne bu konuda ne yapabilirim?

1 Cevap

$this her zaman kullanılan sınıf örneğine işaret. Yani $this controller ve kitaplığınızda her zaman farklı bir şey işaret ve bu konuda yapabileceği çok az var olacaktır.

Ne yapabilirim bunun yerine $this kullanarak ve bu parametreye referans çalışmak istediğiniz parametreyi kabul ettikleri bir kayıt işlevin tanımını değiştirmek için. Diğer seçenek sınıfında bir alan tanımlamak ve referans için tüm sınıfı yöntemlerinin aynı nesne üzerinde bir iş olabilir bu şekilde o alanı kullanmaktır.

Ben bu az elde etmek istediğiniz daha fazla olduğunu düşünüyorum.

class UserController {
    // User library instance
    private $User = new User();

    private $token = null;

    public function registerhandler() {
        $this->token = $this->User->register();
    }

    private function verifyhandler() {
        $valid = $this->User->verify($this->token);
        ...
    }
}

class User {
    private $sharedData;
    public function register() {
        // register all common data in $sharedData property
        ...
        return $token;
    }

    public function verify($token) {
        // use shared data and method input to verify the data
        ...
        return true;
    }
}