2011-07-14 7 views

答えて

5

一般に、静的関数は、インスタンス化する必要なしに、オブジェクトの周りに機能を提供します。それには多くの用途があります。少なくともインスタンス化されていない完全に静的なクラスを使用すると、関数と関連するデータをまとめてバンドルすることができます。通常の関数では、外部のデータを保存することができません(の場合はしないでください)、静的クラスのメソッドは静的なクラスのプロパティでデータを保存できます。

+0

+1私が使用しているフレームワークは、そのメソッドを 'factory()'と呼びます。 – alex

+0

コンストラクタはここでプライベートにする必要がありますか? – Sahal

+0

@Sahalいいえ、なぜですか? – deceze

3

静的メソッド/プロパティを使用するためにオブジェクトをインスタンス化する必要はありません。

このため、オブジェクトに状態を保存できません。

これらは、名前空間に関連するメソッドの方法としてよく使用されます。あなたは、データの配列の代わりに別の引数からオブジェクトを構築することを可能にする、静的関数は、代替コンストラクタとして機能する。この場合

class Foo { 

    protected $bar = null; 
    protected $baz = null; 

    public function __construct($bar, $baz) { 
     $this->bar = $bar; 
     $this->baz = $baz; 
    } 

    public static function instantiateFromArray(array $data) { 
     return new self($data['bar'], $data['baz']); 
    } 

} 

$foo = new Foo('bar', 'baz'); 
// or 
$foo = Foo::instantiateFromArray(array('bar' => 42, 'baz' => 'nine')); 

、:非常に簡単な、幾分不自然な例として

echo str::truncate($str, 100); 
0

クラスのプロパティまたはメソッドを静的として宣言すると、クラスのインスタンス化を必要とせずにアクセスできます。 staticとして宣言されたプロパティは、インスタンス化されたクラスオブジェクトではアクセスできません(静的メソッドでも可能です)。

PHP 4との互換性のために、可視性宣言が使用されていない場合、そのプロパティまたはメソッドはpublicとして宣言されたものとして扱われます。

静的メソッドは、作成されたオブジェクトのインスタンスなしで呼び出し可能であるため、擬似変数$ thisはstaticとして宣言されたメソッド内では使用できません。

静的プロパティには、矢印演算子 - >を使用してオブジェクトからアクセスすることはできません。

非静的メソッドを呼び出すと、静的にE_STRICTレベルの警告が生成されます。

他のPHP静的変数と同様に、静的プロパティはリテラルまたは定数を使用してのみ初期化できます。式は許されません。したがって、静的プロパティを整数や配列に初期化することはできますが、別の変数、関数の戻り値、またはオブジェクトに初期化することはできません。そのインスタンスが存在しない場合

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

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

class Bar extends Foo 
{ 
    public function fooStatic() { 
     return parent::$my_static; 
    } 
} 


print Foo::$my_static . "\n"; 

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

print $foo::$my_static . "\n"; 
$classname = 'Foo'; 
print $classname::$my_static . "\n"; // As of PHP 5.3.0 

print Bar::$my_static . "\n"; 
$bar = new Bar(); 
print $bar->fooStatic() . "\n"; 
+2

少なくとも、あなたはhttp://www.php.net/manual/en/language.oop5.static.php – deceze

1

静的関数は.STATIC関数は静的変数を変更することができる(より純粋なオブジェクト指向言語で)クラスコードを呼び出すために使用されます。

関連する問題