2014-03-10 3 views
1

Я пытаюсь вызвать переменную для добавления в массив внутри класса, но я пытаюсь получить неожиданную ошибку T_VARIABLE при попытке.PHP Variable в массиве класса

class MB_API { 
    $SName = 'Test'; 
    $PWD = 'test'; 
    $SiteID = '10'; 
    protected $client; 
    protected $sourceCredentials = array(
     "SourceName"=>$SName, 
     "Password"=>$PWD, 
     "SiteIDs"=>array($SiteID) 
    ); 
}; 

Переменные могут быть установлены внутри класса или снаружи, это не имеет большого значения. Они будут установлены путем вытаскивания из базы данных.

+0

Вы бы изменить свой вопрос, чтобы включить все сообщение об ошибке, пожалуйста, ? –

ответ

4

по умолчанию значения переменного должно быть время компиляции литералы (Они должны быть постоянными перед тем запускает скрипт, в основном, "literal string" ряд 42 или массив значений констант array(1, 2, 3)), а это означает, что они могут» t имеет динамическое значение (например, другую переменную).

Лучше всего было бы использовать конструктор:

protected $sourceCredentials = []; //PHP5.4 and above syntax, synonymous to array() 

public function __construct(array $sourceCredentials) { 
    $this->sourceCredentials = $sourceCredentials; 
} 

Обратите внимание, что этот путь, это до вызывающей (код, который экземпляр объекта), чтобы передать в массиве полномочий с внешней стороны. Есть разные способы сделать это, но это считается лучшей практикой.

+2

Для расширения нетехническим способом это означает, что '$ sourceCredentials' можно установить только как пустой массив. Вам нужно будет заполнить его из метода 'MB_API' –

+0

@CarlMarkham: расширен и добавлен пример :) –

1

Вы можете назначить свое значение переменной в конструкторе.

Для лучшей практики используется так:

class MB_API { 

    private $Sname; 
    private $PWD; 
    private $SiteID; 
    protected $client; 
    protected $sourceCredentials; 

    public function __construct() { 

     // Set your default Values here 

     $this->Sname = "Test"; 
     $this->PWD = 'test'; 
     $this->SiteID - '10'; 

     $this->sourceCredentials = array(
      "SourceName" => $this->SName, 
      "Password" => $this->PWD, 
      "SiteIDs" => array($this->SiteID) 
     ); 
    } 

} 
+0

Спасибо, что дал мне то, что я искал. – jak1502

-1

У вас есть два различных «$ SNAME» - один является $SName и другое $Sname

+1

PHP нечувствителен к регистру, это не проблема. –

+0

Ahhh, так оно и есть. Устранение моих языков! – roycable