PHPの静的メンバ関数の効率が高い原因を分析します。
1748 ワード
多くのphp開発者は、クラスの静的メンバー関数の効率がクラスの普通のメンバー関数よりも高いことを知っています。本文は応用レベルからこの問題を分析します。
以下は一つの例です。
互換性のためか、phpのクラスのメンバーは、実際には明確な動きと静的な区別はなく、すべてのメンバーは、明確な声明がない場合は、静的なメンバーとして特定のメモリ領域に保存されますので、静的なメンバー関数の呼び出しは、一般的な関数の呼び出しと同じで、速度が速いです。
しかし、動的クラスを呼び出した場合は、このような構造をサンプルとしてメモリ内でオブジェクトのインスタンスを再生成するため、プロセスが多くなりました。これは簡単なクラスにとっては、何でもないかもしれませんが、複雑なクラスにとっては、効率に著しく影響します。
静的な方法を使うとメモリの占有が多すぎるのではないかと心配する人がいますが、上の分析から、静的な方法を声明しないと、システムは依然としてメンバーを静的にするので、完全な静的な方法の種類と完全に動態的ですが、具体的なオブジェクトのクラス占有メモリはほとんど同じであるということが分かります。すべて直接的に静的なメンバーの方法を使うことを提案して、もちろんいくつかの複雑さあるいは像化の明らかな論理に対して、もし完全に静的な種類を使うならばもあり得ないのではありませんて、しかしそのように種類の意義を失って、このようにするならば、OOPを必要として、用途によって、静的な方法は特にMVCモードの論理種類の中で適用します。
以下は一つの例です。
header('Content-Type: text/html; charset=utf-8');
class xclass{
public static $var1 = '1111111111111111';
public $var2 = 'aaaaaaaaaaaaa';
public function __construct()
{
$this -> var2 = 'bbbbbbbbbbbbbbbb';
}
public static function secho1()
{
echo self :: $var1 . '<hr />';
}
public function secho2()
{
echo $this -> var2 . '<hr />';
}
public function secho3()
{
echo 'cccccccccccccc<hr />';
}
}
xclass :: secho1();
xclass :: secho3();
echo "------------------------------<br />";
$xc = new xclass();
$xc -> secho1();
$xc -> secho2();
?>
上の例をよく見ると、セチョー1()は静的な方法として定義された後、動的な対像例では依然として動的な方法として引用されてもよく、セチョク3()は静的なメンバ関数としても使用されてもよく、このレベルからは、なぜ静的なメンバ関数が動的よりも速いのかが理解される。互換性のためか、phpのクラスのメンバーは、実際には明確な動きと静的な区別はなく、すべてのメンバーは、明確な声明がない場合は、静的なメンバーとして特定のメモリ領域に保存されますので、静的なメンバー関数の呼び出しは、一般的な関数の呼び出しと同じで、速度が速いです。
しかし、動的クラスを呼び出した場合は、このような構造をサンプルとしてメモリ内でオブジェクトのインスタンスを再生成するため、プロセスが多くなりました。これは簡単なクラスにとっては、何でもないかもしれませんが、複雑なクラスにとっては、効率に著しく影響します。
静的な方法を使うとメモリの占有が多すぎるのではないかと心配する人がいますが、上の分析から、静的な方法を声明しないと、システムは依然としてメンバーを静的にするので、完全な静的な方法の種類と完全に動態的ですが、具体的なオブジェクトのクラス占有メモリはほとんど同じであるということが分かります。すべて直接的に静的なメンバーの方法を使うことを提案して、もちろんいくつかの複雑さあるいは像化の明らかな論理に対して、もし完全に静的な種類を使うならばもあり得ないのではありませんて、しかしそのように種類の意義を失って、このようにするならば、OOPを必要として、用途によって、静的な方法は特にMVCモードの論理種類の中で適用します。