Присвойте переменную сеанса переменной класса при инициализации переменной класса в PHP - PullRequest
1 голос
/ 29 января 2010

У меня проблема с назначением переменной сеанса переменной класса при инициализации переменной класса.

Проверьте мой код ниже

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

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

}
?>

Когда я запускаю приведенный выше код, создавая этот объект класса. это дает ошибку разбора для php.

Но когда я объявил первую переменную пустым, она работает нормально. Пожалуйста, проверьте код, который работает.

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

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

поэтому я могу присвоить переменную сеанса переменной класса, как указано выше или нет.

EDIT:

Какая польза от открытого, закрытого и защищенного ключевого слова при объявлении переменной класса? Я работаю на php5.

Спасибо

Ответы [ 4 ]

4 голосов
/ 29 января 2010

Некоторые чаевые:

  • избавьтесь от var, используйте private / protected / public вместо.
  • Назначьте необходимое значение в конструкторе, см. Ответ @ hsz.
  • Не думайте, что $ _SESSION ['wb_user_type'] установлено, это плохая практика, ваш класс не будет переносимым.

Хороший пример:

<?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);
?>
4 голосов
/ 29 января 2010

Когда вы присваиваете class переменные, подобные этим, они фактически не могут быть переменными. То есть они должны быть буквальным значением, например строкой, или константой, как во втором примере, который сработал.

Хорошо:

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

Не в порядке:

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

Что вам, вероятно, нужно, это экземпляр переменных. Они инициализируются в конструкторе класса, который является функцией, которая запускается всякий раз, когда вы создаете новый экземпляр этого класса.

class Foo {
    public $bar,
           $baths;

    public function __construct($blah) {
        $this->bar = $_SESSION['bar'];
        $this->baths = $blah;
    }
}
1 голос
/ 29 января 2010

Попробуйте с:

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

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

}
?>
1 голос
/ 29 января 2010

сделать присваивание в конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...