2016-11-20 12 views
0

私はDataTableクラスを実装しようとしています。これは基本的にはSQLテーブルのようなデータを格納するテーブルで、の配列()保護された静的変数phpの値にアクセスできない

以下のようにクラスが定義されている:クラスの関数の外

class DataTable{ 

      protected static $tabela; // table 
      //columns and strips, each column point to a strip 
      public function __construct($colunas, $faixas) { 

       $this->tabela = array(); 
       $this->constroiDt($colunas, $faixas); //builds the table 

      } 

      public function getRows($where){ 
       // todo 
      } 

      public static function getTabela(){ 
       return $this->tabela; 
      } 

      private function constroiDt($colunas, $faixas){ 
       if(count($colunas)!= count($faixas)){ 
        $this->tabela = null; 
        return; 
       } 

       $i=0; 
       foreach($colunas as $cl){ 
        $this->tabela = array_merge($this->tabela, array($cl => $faixas[$i])); 
        $i += $i + 1; 
       } 
       // the result will be an array like ('col1' => ('val1','val2'), 'col2' => ('val1','val2')) 
       // if I want to access a value, just type array['col1'][0] for example 

      } 
     } 

、私は例DTを作成し、それをアクセスしようとすると、それが動作するようです:

$columns = array("name", "age"); 
$strips = array(array("someone","another person"),array("20","30")); 
$dt1 = new DataTable($columns, $strips); 
var_dump($dt1); // will print: 
// object(DataTable)#1 (1) { ["tabela"]=> array(2) { ["nome"]=> array(2) { [0]=> string(6) "fulano" [1]=> string(7) "ciclano" } ["idade"]=> array(2) { [0]=> string(2) "20" [1]=> string(2) "30" } } } 

しかし、その後、私はそれも印刷されない---をecho "--- " . $dt1::getTabela()['nome'][0];

を追加します。 var_dump($dt1::getTabela())およびvar_dump($dt1->getTabela())も空白です。ここでは何が見逃されていますか?またthisを試してみましたが、うまくいきませんでした。

答えて

5

静的関数/には、必ずしもオブジェクトコンテキストを使用する必要はないため、$thisを静的関数に使用しないでください。

代わりに、代わりにself::$tabelaを使用してください。

またはあなたの変数変更(および関連する方法を...)「ノーマル」保護されたプロパティに:

protected $tabela; 
1

あなたは非静的accesors

で静的変数を混合している私はあなたのコードを入れて私は多くのエラー/通知を受けました

NOTICE Accessing static property DataTable::$tabela as non static on line number 10 

NOTICE Accessing static property DataTable::$tabela as non static on line number 31 

NOTICE Accessing static property DataTable::$tabela as non static on line number 31 

NOTICE Accessing static property DataTable::$tabela as non static on line number 31 

NOTICE Accessing static property DataTable::$tabela as non static on line number 31 
object(DataTable)#1 (1) { ["tabela"]=> array(2) { ["name"]=> array(2) { [0]=> string(7) "someone" [1]=> string(14) "another person" } ["age"]=> array(2) { [0]=> string(2) "20" [1]=> string(2) "30" } } } 
FATAL ERROR Uncaught Error: Using $this when not in object context in /home/phptest/public_html/code.php70(5) : eval()'d code:20 Stack trace: #0 /home/phptest/public_html/code.php70(5) : eval()'d code(44): DataTable::getTabela() #1 /home/phptest/public_html/code.php70(5): eval() #2 {main} thrown on line number 20 
+0

ありがとう、私は静的に変更し、働いた – Fabiotk

関連する問題