0

アップデート:

以下に示すコードは、他のWebページのフォームによって呼び出されます。そのため、objのインスタンスを作成しませんでした。

より詳細なコード:

$serverloc='serverURL';

class Aclass{

           function push(){
             global $serverloc;
             echo $serverloc;
             funNotinClass();
           } 

           function otherFunction(){

              echo $serverloc;

           }
}

funNotinClass(){

      echo $serverloc;
}

2つの関数「push()」と「otherFunction()」を含むクラスがあり、独立した関数「funNotinClass()」があり、push()がそれを呼び出します。このクラスは、他のページのWebフォーム用です。ユーザーが[フォームの送信]をクリックしたら、クラスを呼び出して、push()関数を使用します。私が見つけた奇妙なことは、グローバル変数$ serverlocはpush()とfunNotinClass()(それらは何も出力しません)には見えませんが、Aclass内のpuch()のような関数であるotherFuction()です$ serverlocを使用できます(その前にグローバルを追加することすらしません)。なんて奇妙な……誰もがこれを引き起こした理由が何であるか知っていますか?

++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++

phpのグローバル変数のスコープに関する多くの情報を読みました。それらはすべて、グローバル変数が関数またはクラスの外部で定義されており、グローバルこのキーワードを使用して使用できると言っています。

これが私のコードです

$serverloc='serverURL';

class Aclass{

function Afunction(){
 global $serverloc;
 echo $serverloc;

} 
}

しかし、このクラスを実行しても、何も出力されませんでした。それは、私が何か間違ったことをしたか、グローバル変数がこのように機能しないためです。私が前に読んだすべての例は、クラス内の関数ではなく、関数内のグローバル変数に直接アクセスするだけなので

4

3 に答える 3

3

DaveRandom のコメントによると、実際には Aclass オブジェクトのインスタンスを作成していません。

これは機能し、期待どおりにデータを表示します。

<?php 
    $serverloc='serverURL';

    class Aclass{
        global $serverloc;      
        function Afunction()
        {
            echo  $serverloc;
        } 
    }

    $me = new Aclass();

    $me->Afunction(); // output: serverURL

?>

編集: DaveRandom は回答者をコメントとして投稿しているようです。彼の他の回答のいくつかに投票してください。担当者は私ではなく彼のものです。私は今夜​​彼のゴーストライターです。

于 2012-08-16T11:39:19.247 に答える
1

それがクラスグローバルである場合、あなたは次のようにすることができます

class myClass
{    
  private $globVar = "myvariable";

  function myClass()
  {
    return $this->globVar;
  }
}
于 2012-08-16T11:41:42.473 に答える
0

しかし、このクラスを実行しても何も出力されませんでした

クラスを実行するという意味では、クラスを実行しません。クラスは、関連するデータと関数 (メソッドと呼ばれる) を保持する単なるデータ構造です。

ほとんどの従来のデータ構造と同様に、それらのインスタンス (オブジェクトと呼ばれる) を作成し、それらに対してアクションを実行します。オブジェクト (クラスのインスタンス) に対してアクションを実行する 1 つの方法は、何かを行うようにメッセージを渡すことです。つまり、メソッドを呼び出します。

したがって、あなたの場合、次のことができます。

$obj = new Aclass(); // create an object, instance of Aclass
$obj->Afunction();   // ask it to perform an action (call a method)

そうは言っても、オブジェクト内で実際にデータを共有することのない、関連する関数をグループ化するためだけのクラスを作成したい場合があります。多くの場合、グローバル変数を介してデータを共有する場合があります (例: $_SERVER$_GETなど)。それはあなたのデザインの場合かもしれません。

このようなクラスは、次のように、インスタンス化せずにメソッドを実行できます。

Aclass::Afunction();

グローバル変数に依存することは、通常、クイック アンド ダーティ デザインの指標ですが、それが実際に最善のトレードオフである場合もあります。またはは、これらのケースの1つである可能$serverlocation$baseurlが非常に高いと思います。:)

続きを見る:

于 2012-08-16T11:55:12.627 に答える