PHPの静的メンバー関数の効率が高い原因を分析する
3430 ワード
phpクラスの静的メンバー関数の効率はクラスの普通のメンバー関数より高い.
例:
上記の例をよく見ると、secho 1()が静的メソッドとして定義された後も、動的クラスの対像インスタンスでは動的メソッドとして参照され、secho 3()は静的メンバー関数としても使用される点が興味深い.この面から、静的メンバー関数が動的より速い理由は理解に難くない.
互換性のためか、phpのクラスメンバーは実際には明らかな動静的な区別がなく、すべてのメンバーが明確に宣言されていない場合、静的メンバーとして特定のメモリ領域に格納されるため、静的メンバー関数を呼び出すのは通常の関数を呼び出すのと同じで、速度が速い.しかし、動的クラスを呼び出すのは異なり、このクラス構造をサンプルとしてメモリにオブジェクトインスタンスを再生成するため、(www.jbxue.com)単純なクラスでは大したことではないかもしれませんが、複雑なクラスでは効率に明らかな影響を及ぼします.静的メソッドを使用するとメモリの消費量が多すぎるのではないかと心配する人もいますが、実際には上の分析から、静的メソッドを宣言しないと、システムは依然としてメンバーを静的と見なしているため、完全な静的メソッドのクラスと完全に動的ですが、インスタンスオブジェクトを宣言していないクラスのメモリの消費量はほとんど同じであることがわかります.したがって、比較的直接的な論理では、静的メンバーメソッドを直接使用することをお勧めします.もちろん、いくつかの複雑な論理や画像化の明らかな論理は、完全に静的クラスを使用することも不可能ではありませんが、クラスの意味を失うことになります.もしそうなら、OOPを必要としないで、用途によって、静的メソッドはMVCモードの論理クラスに特に適用されます.
例:
<?php // php
header('Content-Type: text/html; charset=utf-8');
class xclass{
public static $var1 = '1111111111111111';
public $var2 = 'aaaaaaaaaaaaa';
public function __construct()
{
$this -> var2 = 'bbbbbbbbbbbbbbbb';
} www.jbxue.com
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();
?>
上記の例をよく見ると、secho 1()が静的メソッドとして定義された後も、動的クラスの対像インスタンスでは動的メソッドとして参照され、secho 3()は静的メンバー関数としても使用される点が興味深い.この面から、静的メンバー関数が動的より速い理由は理解に難くない.
互換性のためか、phpのクラスメンバーは実際には明らかな動静的な区別がなく、すべてのメンバーが明確に宣言されていない場合、静的メンバーとして特定のメモリ領域に格納されるため、静的メンバー関数を呼び出すのは通常の関数を呼び出すのと同じで、速度が速い.しかし、動的クラスを呼び出すのは異なり、このクラス構造をサンプルとしてメモリにオブジェクトインスタンスを再生成するため、(www.jbxue.com)単純なクラスでは大したことではないかもしれませんが、複雑なクラスでは効率に明らかな影響を及ぼします.静的メソッドを使用するとメモリの消費量が多すぎるのではないかと心配する人もいますが、実際には上の分析から、静的メソッドを宣言しないと、システムは依然としてメンバーを静的と見なしているため、完全な静的メソッドのクラスと完全に動的ですが、インスタンスオブジェクトを宣言していないクラスのメモリの消費量はほとんど同じであることがわかります.したがって、比較的直接的な論理では、静的メンバーメソッドを直接使用することをお勧めします.もちろん、いくつかの複雑な論理や画像化の明らかな論理は、完全に静的クラスを使用することも不可能ではありませんが、クラスの意味を失うことになります.もしそうなら、OOPを必要としないで、用途によって、静的メソッドはMVCモードの論理クラスに特に適用されます.