Ben bir sınıfın iki örneği var ve ben ne bu almak $ olacak, hangi belirtmeden örneğinin birini başvurmak için $ this kullanırsanız?

4 Cevap php

PHP scripts register.php:

$compareUser = new User();
   $user = new User;

verify.php (register.php bir link ile yürütür User.php iki değişken geçer)

User.php

setActive($token, $uid){
   $this->username = /????
}

*assuming that User has a username property, which instance of the User class will $this take? $compareUser or $user?

4 Cevap

Bu tamamen size setactive () çağırmak hangi nesne bağlıdır. Sadece yazmak değil ...

setActive('foo', 'bar');

Bu iki birini yazmalısınız:

$compareUser->setActive('foo', 'bar');
$user->setActive('foo', 'bar');

Her iki durumda da, $this Bu yöntemi çağırmak için kullanılan nesne hangisi olduğunu. Bu, aslında, $this değişken tesisinin amacıdır.

class User {
  var $username;
  function User($name) {
    $this->username = $name;
  }
  function setActive($token, $uid) {
    echo $this->username;
  }
}

$user1 = new User('tom');
$user2 = new User('sally');

$user1->setActive(1, 2); // tom
$user2->setActive(1, 2); // sally

Emin olun setactive yukarıdaki gibi sınıf tanımında tanımlanır. Umarım yukarıdaki net şeyler olur.

$this bağlam-duyarlı olduğunu - her zaman kod çalıştığı geçerli bağlama anlamına gelir.

Bu başvurmak mümkün değildir $this bir (non-static) sınıf yöntemi içinde onu aramak sürece. Bunu yaptığınızda, $this çalışma zamanlar bu yöntemi çağrılan sınıfın hangisi örneği ifade eder.

Yanılıyorsun nerede bizim ilk soru "without specifying which" parçasıdır.

Örnekleri görüldüğü gibi: O zaman o sınıfın biri belirli örneği içinde denir beri, $this "belirtilmemiş" kullanmak mümkün değildir.

Benim yorum göstermek için Düzenlendi:

class Foo
{
  protected $var;

  function _construct( $var )
  {
    $this->var = $var;
  }

  function echoVar()
  {
    // Works since it's within a class and points to an instance's variable:
    echo $this->var; 
  }
}

$first = new Foo( 'first' );
$second = new Foo( 'second' );

// These will work:
$first->echoVar();
$second->echoVar();

// This won't. What's it supposed to show?
$this->echoVar();