答えて
。
一般に、静的関数は、インスタンス化する必要なしに、オブジェクトの周りに機能を提供します。それには多くの用途があります。少なくともインスタンス化されていない完全に静的なクラスを使用すると、関数と関連するデータをまとめてバンドルすることができます。通常の関数では、外部のデータを保存することができません(の場合はしないでください)、静的クラスのメソッドは静的なクラスのプロパティでデータを保存できます。
静的メソッド/プロパティを使用するためにオブジェクトをインスタンス化する必要はありません。
このため、オブジェクトに状態を保存できません。
これらは、名前空間に関連するメソッドの方法としてよく使用されます。あなたは、データの配列の代わりに別の引数からオブジェクトを構築することを可能にする、静的関数は、代替コンストラクタとして機能する。この場合
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);
クラスのプロパティまたはメソッドを静的として宣言すると、クラスのインスタンス化を必要とせずにアクセスできます。 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";
少なくとも、あなたはhttp://www.php.net/manual/en/language.oop5.static.php – deceze
静的関数は.STATIC関数は静的変数を変更することができる(より純粋なオブジェクト指向言語で)クラスコードを呼び出すために使用されます。
- 1. 静的関数の構文は何ですか?
- 2. 静的関数の利点は何ですか?
- 3. プライベート静的関数とtypcriptのパブリック静的関数の違いは何ですか?
- 4. PHPで静的プロパティとメソッドを使用したOOPプログラミングの例
- 5. rubyのクラス/静的メソッドでの使用は何ですか?
- 6. 静的メンバー関数とグローバル関数の違いは何ですか?
- 7. 代わりに、OOPのグローバル関数は何ですか?
- 8. 関数内で宣言された静的変数の値は何ですか?
- 9. 静的メソッドを使用する目的は何ですか?
- 10. 関数と静的メソッドの使用
- 11. Laravel 5.2モデル静的関数の使用
- 12. PHP:静的関数の使用
- 13. 静的インライン関数はスレッドセーフですか?
- 14. グローバルスコープでの静的変数と関数の使用
- 15. PHP関数での静的変数の使用
- 16. この静的変数の目的は何ですか?
- 17. ロック内の非静的ローカル変数を使用するポイントは何ですか?
- 18. クラスの静的関数は、グローバル静的変数にアクセスできますか?
- 19. C++の静的関数ポインタメンバーへの未定義の参照は何ですか?
- 20. PHPでカスタムエラーログの静的関数を使用する方法
- 21. メンバー関数内で静的変数を作成できますか?そのクラスのインスタンス内では静的変数のみが使用できますか?
- 22. 静的メソッド継承と静的変数継承の違いは何ですか?
- 23. Javaで静的関数を使用するインスタンス変数
- 24. Javaの静的メソッドで非静的変数を使用できますか?
- 25. 関数内の静的な記憶クラスとその理由は何ですか?
- 26. 関数の静的な新しい修飾子のポイントは何ですか?
- 27. 静的ブロックと静的フィールドの違いは何ですか?
- 28. 静的な目的は何ですか?
- 29. C#で静的関数を使用しているのは、関数型プログラミングの一種ですか?
- 30. 関数の引数の前に&を使用する目的は何ですか?
+1私が使用しているフレームワークは、そのメソッドを 'factory()'と呼びます。 – alex
コンストラクタはここでプライベートにする必要がありますか? – Sahal
@Sahalいいえ、なぜですか? – deceze