0
class Foo
{
    public static $my_static = 'foo';

    public static function staticValue() {
        return self::$my_static;
    }
}


$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; 

PHPのオブジェクトを使用して静的リソースにアクセスできるのに、静的属性にアクセスできないのはなぜですか。「::」を使用してのみアクセスできます。

4

2 に答える 2

1

2 つの「スコープ」があるため、1 つは「オブジェクト」、もう 1 つはすべてのクラス内の「静的」です。したがって、静的メソッド内で通常のメソッドを実行したいという同じ問題が発生します。例えば:

class foo {
 public function bar() {
  echo "bar";
 } 

 public static function bar2() {
   echo $this->bar();
 }
}

$foo = new foo();
$foo->bar2();

これは、静的コンテキストにあり、そこからオブジェクト コンテキストにアクセスできないためです。これについては、これ以上言うことはできないと思います。あなたがそこに住んでいる2つの家族を持つ家を持っていて、それらの間のドアが決して開くことができないように見てください. クラスである 1 つのグローバル ハウス、次にオブジェクト スコープであるファミリー 1、最後に静的スコープであるファミリー 2 があります。

たぶんこれが役に立ちました。

于 2013-01-11T10:13:18.247 に答える
0

スコープ解決演算子 :: を使用してアクセスする必要があります

echo  $foo::my_static . "\n"; 
于 2013-01-11T06:15:49.250 に答える