2017-03-09 36 views
-2

當我嘗試運行腳本時,即使在全局範圍內定義腳本,我的ONE,TWO和THREE變量也未定義。我的A,B和C變量被認爲是定義的。起初我認爲這是因爲我將常量值分配爲鍵,但是我沒有在網上找到任何說我無法做到的事情。變量未定義,即使在聲明後

<?php class aClass 
{ 


    const A = 1; 
    const B = 2; 
    const C = 3; 

    const ONE = 1; 
    const TWO = 2; 
    const THREE = 3; 
    public $arr = []; 


    function __construct() { 

     $this->createArray(); 

    } 



    function createArray() { 

     $this->arr[] = $this->A = [ 
      $this->ONE => 'one.', 
      $this->TWO => 'two', 
      $this->THREE => 'three' 
      ]; 

     $this->arr[] = $this->B = [ 
      $this->ONE => 'one', 
      $this->TWO => 'two', 
      $this->THREE => 'three', 
      ]; 

     $this->arr[] = $this->C = [ 
      $this->ONE => 'one', 
      $this->TWO => 'two', 
      $this->THREE => 'three', 
      ]; 


    } 
} 


?> 
+1

什麼是你想用這個來完成?你可以在'createArray()'運行後包含一個你希望'$ this-> arr'的例子嗎? –

回答

1

您確實需要從$this=>createArray改變常數self::,但僅靠這種變化應該導致語法錯誤:

$this->arr[] = self::A = [ 
    self::ONE => 'one.', 
    self::TWO => 'two', 
    self::THREE => 'three' 
]; 

將讓你

Parse error: syntax error, unexpected '='

at this line:

$this->arr[] = self::A = [` 
//    this^is the unexpected = 

您使用的常量值提到鍵,這你與

self::ONE => 'one.' 

做什麼,但就是不你與

$this->arr[] = self::A = [ ... 

隨着這條線做什麼,你沒有使用self::A作爲鍵,你實際上將以下數組分配到self::A(這會導致「意外」='「錯誤,因爲你不能指定常量),然後將self::A分配到$this->arr[]

如果你想使用self::A作爲$this->arr的關鍵,你需要像這樣做,而不是:

$this->arr[self::A] = [ 
    self::ONE => 'one.', 
    self::TWO => 'two', 
    self::THREE => 'three' 
]; 
5

您在aClass類中定義了常量而不是屬性。你必須更換$this->ONEself::ONE

+0

我做到了這一點,我的錯誤消失了。然而,我很好奇爲什麼我不需要用我的A,B,C變量來做這件事,因爲它們本身就是常量。 – iii

+1

因爲你正在分配這些變量,而不是訪問它。你看得到差別嗎 ? –

+0

常量在運行時不能更改。如果你喜歡self :: FOO ='bar';你將會有一個致命的錯誤 –