0

重複
の可能性: クラス内からグローバル変数にアクセスする

PHPの知識を強化したい。しかし、ほとんどの場合、スコープを理解するのに苦労します。関数で $this およびグローバル宣言キーワードを使用するタイミングがわかりません。

これは単なるクラスの例です __construct() を省略しました

    class myClass{
    public myVariable;

       public function1() {
          $this->myVariable=1;
       }

       public function2(){
          global $myVariable;
          $myVariable=1;
       }
    }

関数内で事前に宣言された変数を割り当てるときに使用する最良の方法はどれですか? 私は、主要な出版社による PHP のさまざまな本に戸惑っています。正しい質問をしているのか、何らかの形で関連性があるのか​​ わかりません。

4

3 に答える 3

1

まず第一に、Jared Farrish が既に述べたように、これは有効な PHP ではありません。そのpublic $myvar代わりにpublic myvar。変数名は常に で始まります$

クラスで変数を宣言すると、次のようになります。

<?php
class A
{
    private $var;
}

その変数は、アクセスするとすべてのメソッドで自動的に使用可能になります$this(メソッド static を除きますが、それは別の話です)。したがって、これは機能します:

<?php
class A
{
    private $var;

    public function foo () {
        // This works 
        $this->var = 1;

        // This is a completely different thing and does not change
        // the contents of A::$var
        $var = 1; 
    }
}

globalは全く別物です。PHPでは、これを行うことはできません:

<?php
$global_a = 123;

function myfunc ()
{
    // You wont actually change the value of $global_a with this
    $global_a = 1234;
}
echo $global_a; // still 123

これでうまくいくと思うかもしれませんが、関数でグローバル変数を自動的に使用できるわけではありません。これがglobal出番です:

<?php 
$global_a = 123;

function myfunc ()
{
    global $global_a;
    $global_a = 1234;
}
echo $global_a; // now it will be 1234

PHP の変数スコープについて読んでから、PHP の OOP に進むことをお勧めします。

PHP は非常に風変わりな言語です。ほとんどの言語で特定の方法で機能するからといって、それが PHP でも機能するとは限りません。ほとんどの場合、それはありません。ですから、できるだけ自分自身を教育するのが最善です。

お役に立てれば

于 2013-01-13T12:25:11.347 に答える
0

どちらが最適かは、多くの場合、状況によって異なります。一般に、グローバル変数は、どこで使用されているか正確にわからないというリスクを伴うため、避けるのが最善です。

変数がクラスのそのインスタンスに固有のものである場合は、クラス変数を使用することをお勧めします。(ただし、接頭辞を付ける必要が$あります。つまり、public $myVariable;)。

変数がクラス外の関数とインスタンスにのみ関連する場合は、参照として渡すのが最善です。これは、パラメータ スペースのの&前にを追加することによって行われます。$すなわち:

public function3(&$myVariable) {
    $myVariable = 1;
}

または、必要な値を返し、関数の外に設定するだけです。すなわち、:

class MyClass {
    public function3() {
        return 1;
    }
}

$myObject = new MyClass();
$myVariable = $myObject->function4();
于 2013-01-13T12:19:13.293 に答える
0

それには多くの正当な理由があるため、グローバル変数を渡さないようにしてください。

  1. スクリプトの一部を再利用することは不可能です: 特定の関数がグローバル変数に依存している場合、その関数を別のコンテキストで使用することはほとんど不可能になります。もう 1 つの問題は、その関数を別のスクリプトで使用できないことです。

  2. バグの解決ははるかに困難です: グローバル変数の追跡は、非グローバル変数の追跡よりもはるかに困難です。

  3. 1 年でコードを理解することは、はるかに難しくなります。グローバルは、変数がどこから来て、何をするのかを理解することを困難にします。

今あなたの質問:

関数内で事前に宣言された変数を割り当てるときに使用する最良の方法はどれですか? 関数内で値または参照
で 渡すことができます

値による

$firstVar = 1;

function abc($firstVar){
    echo $firstVar ; // will give you 1
}

参照により

function abc(&$firstVar){
    $firstVar = 3;   // this will give utility to change that variable even
    echo $firstVar ; // will give you 3
}

$this 変数を使用する場所:

$this は、現在のオブジェクトを参照するために使用されます。例:

class abc{
    private $firstVar;

    function abc(){
        $this->firstVar = 2;
    }
}
于 2013-01-13T12:33:12.973 に答える