2

私が持っている場合:

<?php
class SomeClass extends SomeOtherClass{
  private $access_code = 'TX9999';

  private static function SomeMethod(){

  }
}

?>

そして、やります

<?
self::SomeMethod();
?>

$access_codeに正しくアクセスするにはどうすればよいですか::SomeMethod()

より詳しい情報

私が実際に直面していることはもっと複雑です。

静的であり、静的でなければならないメソッドを持つクラスがあります。self を使用して他のメソッドを呼び出す方法を知っています。

ただし、クラス全体で、通常は定数と変数として意味のあるものがあります。

通常の方法でインスタンスを取得していないことに気付き、クラスのいくつかの静的メソッド間で変数を共有する方法を探しています。いくつかは揮発性で、いくつかは固定されています

4

5 に答える 5

2

これはあなたが望むことをします。プライベート インスタンス変数にアクセスできるようになる前に、まず自身のインスタンスを作成します$access_code

$o = new self;
echo $o->access_code;

インスタンス変数の代わりにクラス変数が必要な場合は、次の$access_codeように宣言する必要があります。

private static $access_code = 'TX9999';

次に、次のように静的メソッドから呼び出します。

private static function SomeMethod()
{
    echo self::$access_code;
}

::SomeMethod()ところで、クラスの外から呼び出すことはできません。そのためには、次のようにする必要がありますpublic

public static function SomeMethod() { ... }
于 2012-07-02T14:14:43.703 に答える
1

これは静的メソッドであり、変数はそうではないため、インスタンスが必要になります。その値が変わらない場合は、次のようにすることをお勧めします。

<?php
class SomeClass extends SomeOtherClass{
  private static $access_code = 'TX9999';

  private static function SomeMethod(){

  }
}
于 2012-07-02T14:16:36.360 に答える
0

キーワードを使用する必要があるとself思うので、次のように関数でアクセスします。

private static function SomeMethod(){
   return self::$access_code;
}

編集: $access_code は、これが機能するために static として宣言する必要があります。

于 2012-07-02T14:17:36.790 に答える
0

通常 (PHP の場合は 100% 確実ではありません)、クラスの変数にアクセスするには、クラスのインスタンスが必要です。

2 番目の可能性は、変数も静的にすることです。

例:

1.

<?php
class SomeClass extends SomeOtherClass{
  public $access_code = 'TX9999';

  public static function SomeMethod() {
     SomeClass sc = new SomeClass();
     echo sc.access_code;
  }
}

2.

<?php
class SomeClass extends SomeOtherClass{
  public static $access_code = 'TX9999';

  public static function SomeMethod() {
     // no need for SomeClass, because your in the same class, but if you want to use it directly from outside the class
     echo SomeClass.access_code;
  }
}
?>

ところで:プライベートからパブリックに変更しました

ps:これがphpと互換性があるかどうかはわかりません:)

于 2012-07-02T14:16:43.130 に答える
0

最初に、

<?
SomeClass::SomeMethod();
?>

失敗します。あなたはそれを非公開として宣言しました。つまり、静的に宣言されていても、クラス内でのみ呼び出すことができます。外ではありません。protectedまたはに変更しpublicます。

また、

$access_code静的として宣言しない限り、静的メソッド内から from を呼び出すことはできません。静的メソッドには への洞察がありません$this。定数にアクセスできますselfが、アクセスしているものは静的でなければなりません。

于 2012-07-02T14:16:53.580 に答える