Basit PHP sınıfları soru

4 Cevap php

Yani var:

class foo {
  public $variable_one;
  public $variable_two;

  function_A(){
    // Do something
    $variable_one;
    $variable_two;

    // If I define variable_3 here!
    $variable_3
    // Would I be able to access it in function_B?
  }

  function_B(){
    // Do something
    $variable_4 = $variable_3
  }
}


$myObj = new foo();
// Now what do I write in order to assign "variable_one" and "two" some value?
$myObj->$variable_one = 'some_value' ??
$myObj->$variable_two = 'some_value' ??

4 Cevap

Sadece yazmak Birincisi, $variable_one; içine A() o not sınıfın üye değişkenlerine bakın yok! İşte $variable_one sınıf değişkeni ile hiçbir ilişkisi taşıyan denilen tamamen farklı, yeni oluşturulan yerel değişken olacaktır.

Bunun yerine, istediğiniz:

function A() {
    $this->variable_one;
}

İkincisi, sizin $variable_3, aynı zamanda yerel bir değişkendir, ve not başka bir fonksiyonu erişilebilir olacaktır.

Üçüncü olarak, alt kısmında atamaları sözdizimi şeklinde doğru değil: ekstra bir $ orada var. İstediğiniz:

$myObj->variable_one = 'some value';

Hayır, $variable_3 oluşturuldu (ve imha edilecek) kapsamındaki function_A. Bu kapsam çalışması nedeniyle.

http://us3.php.net/manual/en/language.variables.scope.php

Yürütme function_a kapsamını yaprakları kez size nesnesi tarafından saklanacaktır $ variable_3 istiyorsanız, size $ variable_1 ve $ variable2 benzer bir sınıf özelliği gibi atamanız gerekir.

class YourClass
{

    public $variable_1;
    public $variable_2;
    public $variable_3;

    function_A()
    {
        $this->variable_3 = "some value"; // assign to the object property
        $variable_4 = "another value"; // will be local to this method only
    }

    function_B()
    {
        echo $this->variable_3; // Would output "some value"
        echo $variable_4; // var does not exist within the scope of function_B
    }

}

Doğru kod (açıklamaların içinde cevaba bakınız) şu olacaktır

class foo {
  public $variable_one;
  public $variable_two;
  private $variable_three; // private because it is only used within the class

  function _A(){
    // using $this-> because you want to use the value you assigned  at the
    // bottom of the script. If you do not use $this-> in front of the variable, 
    // it will be a local variable, which means it will be only available inside
    // the current function which in this case is _A
    $this->variable_one; 
    $this->variable_two;

    // You need to use $this-> here as well because the variable_3 is used in
    // function _B
    $this->variable_3;
  }

  function _B(){
    // Do something
    $variable_4 = $this->variable_3
  }
}


$myObj = new foo();
$myObj->variable_one = 'some_value1'; // Notice no $ in front of the var name
$myObj->variable_two = 'some_value2'; // Notice no $ in front of the var name

Onlar (sizin örnekte onlar değil) statik olmadıkça sınıf değişkenleri (özellikleri), bu-> önek $ kullanılarak erişilebilir olmalıdır. Eğer önek $ kullanmak istemiyorsanız bu-> size onları tanımlamak fonksiyon içinde yerel değişkenler olacaktır.

Bu yardımcı olur umarım!

Eğer variable_one ve variable_two public, size belirtilen (... sadece "$" kaldırın böylece $ classObject-> variable_one) atayabilirsiniz vardır. Genellikle onları korumalı veya özel yaparak encapsulate Değişkenlerinizin istiyorum:

class MyClass
{
    protected $_variable_one;

    public function getVariableOne()
    {
        return $this->_variable_one;
    }

    public function setVariableOne($value)
    {
        $this->_variable_one = $value;
    }
}

$c = new MyClass();
$c->setVariableOne("hello!");

echo $c->getVariableOne(); // hello!