PHP sınıf değişkeni başlatmak sırasında sınıf değişkeni oturum değişkeni atama

4 Cevap php

Ben sınıf değişkeni başlatmak sırasında sınıf değişkene atamak oturum değişkeni ile ilgili bir sorun var.

Benim aşağıdaki kodu kontrol

<?php 
class ModifyProfile
{
    var $userType=$_SESSION['wb_user_type'];

    var $tablename=WB_CUSTOMER_TABLE;
    var $primarykey="nCustomerID";

}
?>

Ben bu sınıf nesnesi oluşturarak Yukarıdaki kodu çalıştırdığınızda. onun php için ayrıştırma hatası veriyor.

But when i have declare the first variable to blank then its working fine. Please check the code which is working.

<?php 
class ModifyProfile
{
    var $userType='';

    var $tablename=WB_CUSTOMER_TABLE;
    var $primarykey="nCustomerID";
}
?>

bu yüzden, yukarıda ya da değil gibi sınıf değişkeni oturum değişkeni atayabilirsiniz.

EDIT:

What is the use of public, private and protected keyword while declaring class variable? I am running on php5.

Teşekkürler

4 Cevap

Böyle class değişkenleri atadığınızda, aslında değişken olamaz. Yani böyle bir dize gibi bir değişmez değer, ya da çalışmış ikinci örnekteki gibi bir sabit olmak zorunda değildir.

Ok:

public $foo = 123;
public $bar = "hello";
public $blah = SOME_CONSTANT;

Not Ok:

public $foo = 123 + 45;
public $bar = "hello"
            . "world";
public $blah = some_function();

Ne muhtemelen istediğiniz instance değişkenleri olduğunu. Bunlar o sınıfın yeni bir örneğini oluşturmak için her çalışmasına bir işlevdir sınıf yapıcısı, başlagıç edilir.

class Foo {
    public $bar,
           $baths;

    public function __construct($blah) {
        $this->bar = $_SESSION['bar'];
        $this->baths = $blah;
    }
}

Bazı Değerlendirmeler:

  • var yerine public kullanmak private / protected / kurtulabilirsiniz.
  • Yapıcısındaki gerekli değeri atamak, HSZ cevabı @ bakın.
  • $ _SESSION ['Wb_user_type'] sanmayın ayarlanır, bu kötü bir uygulamadır, sınıf taşınabilir olmayacaktır.

İyi örnek:

<?php 
class ModifyProfile
{
    protected $tablename=WB_CUSTOMER_TABLE;

    public function __construct($user_type) {
        $this->userType = $user_type;
    }

}

$user_type = isset($_SESSION['wb_user_type']) ? $_SESSION['wb_user_type'] : 'n/a';

$profile = new ModifyProfile($user_type);
?>

yapıcısındaki atama yapılacak.

Ile deneyin:

<?php 
class ModifyProfile
{
    var $tablename=WB_CUSTOMER_TABLE;
    var $primarykey="nCustomerID";

    public function __construct() {
        $this->userType = $_SESSION['wb_user_type'];
    }

}
?>