2017-06-12 11 views
2

私は3つの異なる関数から1つの関数で3つの変数にアクセスしようとしています。それらはすべて配列です。私はforeachその単一の機能でそれらにしたいです。異なる関数で変数にアクセスするPHP

class poetry { 
    public function __construct() { 
     add_action('wp_head', array($this, 'generate_scripts')); 
    } 

    public function page_one() { 
     $options = array(
      array('content1', 'Content1', 'The Content 1'), 
      array('content2', 'Content2', 'The Content 2'), 
      array('content3', 'Content3', 'The Content 3'), 
     ); 

     $this->add_settings('page_one', $options); 
    } 

    public function page_two() { 
     $options = array(
      array('content4', 'Content4', 'The Content 4'), 
      array('content5', 'Content5', 'The Content 5'), 
      array('content6', 'Content6', 'The Content 6'), 
     ); 

     $this->add_settings('page_two', $options); 
    } 

    public function page_three() { 
     $options = array(
      array('content7', 'Content7', 'The Content 7'), 
      array('content8', 'Content8', 'The Content 8'), 
      array('content9', 'Content9', 'The Content 9'), 
     ); 

     $this->add_settings('page_three', $options); 
    } 

    public function generate_scripts() { 
     // how do I access $options from the above functions in this function? 
     foreach($options as $option) { 
      echo $option[0]; 
     } 
    } 

} 

は、どのように私は、上記の機能から、すべての3 $optionsにアクセスし、generate_scripts()で配列をforeachのことができますか?

答えて

1

あなたがそれらを使用する関数と同じスコープ内の変数を取得する必要があります。あなたは$thisを使用して、クラスの変数を設定するか、またはあなたは、配列をreturnすることができます。いずれにしても、最初に呼び出す必要があります。

ここでは、すべての変数をクラスのプロパティとして作成し、$thisを使用する方法の例を示します。変数を使用するには、そのメソッドを呼び出してから、その変数を使用する必要があることに注意してください。

class poetry { 
    private $page_one; // Initialize variable first 

    public function __construct() { 
     add_action('wp_head', array($this, 'generate_scripts')); 
    } 

    public function page_one() { 
     $this->page_one = array(
      array('content1', 'Content1', 'The Content 1'), 
      array('content2', 'Content2', 'The Content 2'), 
      array('content3', 'Content3', 'The Content 3'), 
     ); 
    } 

    /* Rest of class */ 

    public function generate_scripts() { 
     $this->page_one(); // Call method, so variable holds the values 
     $options = $this->page_one; 
     foreach($options as $option) { 
      echo $option[0]; 
     } 
    } 
} 

また、あなたはreturn各配列を使用し、$options値としてそれを使用することができます。関数内で複数回使用する必要がある場合は、最後にreturn $options; - 必要な処理をすべて実行した後に行うことができます。このようにして、このメソッドは配列を返します。必要なだけ内部で変数として使用できます。

public function page_one() { 
    $options = array(
     array('content1', 'Content1', 'The Content 1'), 
     array('content2', 'Content2', 'The Content 2'), 
     array('content3', 'Content3', 'The Content 3'), 
    ); 

    $this->add_settings('page_one', $options); 
    return $options; 
} 


public function generate_scripts() { 
    $options = $this->page_one(); 
    foreach($options as $option) { 
     echo $option[0]; 
    } 
} 

すべてのメソッドを呼び出す場合は、コードを追加する必要があります。メソッドの呼び出し時にすべての配列をプッシュし、それをループするクラスのプロパティを持つことができますが、変数を使用できるようにするにはそれらのメソッドを呼び出す必要があります。

+0

物事を理解しようとすると、しばらく時間がかかる可能性があります。 –

+0

私は助けることができるかどうか教えてください!正確に何を把握しようとしていますか? – Qirel

+0

ああ、WordPress関数で定義されていないエラーが発生しました。下に置かずにその上にリターンを置くことで修正しました。助けてくれてありがとう! –

-1
<?php 

class poetry { 

    private $options_one; 
    private $options_two; 
    private $options_three; 


    public function __construct() { 
     add_action('wp_head', array($this, 'generate_scripts')); 
    } 

    public function page_one() { 
     global $options_one; 
     $options_one = array(
      array('content1', 'Content1', 'The Content 1'), 
      array('content2', 'Content2', 'The Content 2'), 
      array('content3', 'Content3', 'The Content 3'), 
     ); 
    } 

    public function page_two() { 
     global $options_two; 
     $options_two = array(
      array('content4', 'Content4', 'The Content 4'), 
      array('content5', 'Content5', 'The Content 5'), 
      array('content6', 'Content6', 'The Content 6'), 
     ); 
    } 

    public function page_three() { 
     global $options_three; 
     $options_three = array(
      array('content7', 'Content7', 'The Content 7'), 
      array('content8', 'Content8', 'The Content 8'), 
      array('content9', 'Content9', 'The Content 9'), 
     ); 
    } 

    public function generate_scripts() { 
     $this->page_one(); 
     $this->page_two(); 
     $this->page_three(); 
     global $options_one, $options_two, $options_three; 
     $options = array_merge($options_one[0], $options_two[0], $options_three[0]); 
     foreach ($options as $option) { 
      echo $option . "<br/>"; 
     } 
    } 

} 
+0

説明はなく、コードダンプだけです。それはあまり役に立たないだろう。また、 'global'の使い方はあまり良いことではありません。 – Qirel

+0

コードダンプではありません。私は自己で修正しました。あなたのコードが十分であれば、説明は必要ありません。 –

+0

それはまさにそれがコードダンプなのです!それを説明したり、サポートしたりするテキストはありません。だから、あなたが変わったものを見るためには、それぞれの行を勉強する必要があります。それは良い答えではありません。 [良い答えを書く方法(SOメタ)](https://meta.stackexchange.com/questions/7656/how-do-i-write-a-good-answer-to-a-question)そして、それでも、グローバルなアプローチは本当に良いアイデアではありません。なぜ、 'global'を使うべきではないのですか?(https://stackoverflow.com/a/1558073/4535200)。あなたが私の答えをあまりにもdownvoteしようとしているなら、少なくともコメント*を書いてください*なぜ* ;-) – Qirel

関連する問題