静電気に関するディスカッション

WBOY
リリース: 2016-06-23 13:58:15
オリジナル
812 人が閲覧しました

私は以前、静的プライベートとプライベートの違いについて質問しましたが、Lao Xu は、それはアクセス方法の違いだけだと言いました。その後、インターネット上の一部の人々は、静的はパフォーマンスを向上させることができると言っていますが、Lao Xu は異なる意見を持っていると言いました。
今日、誰かがこんなことを言っているのをまた見かけました。 1. クラス メソッドを静的として定義できる場合は、それを静的に定義してみます。そうすれば、その速度はほぼ 4 倍向上します。
この声明の出典: http://www.php100.com/html/it/focus/2014/0403/6746.html
この声明が真実か偽か、また著者がどのようにテストして作成したのかはわかりません。この言葉は確信を持って言えます 毛織物?


ディスカッションへの返信 (解決策)

static は静的プロパティを宣言し、クラスをインスタンス化せずに直接アクセスできます
彼が言った高速化は、おそらく public インスタンス化せずに直接アクセスできるプロパティにのみ適用されます
ただし、 private 保護された属性には外部から直接アクセスできないため、高速化はありません

真実をテストするための唯一の基準は実践です

class T {  static function foo($n) {    return $n + 1;  }  function foo1($n) {    return $n + 1;  }}function foo($n) {  return $n + 1;}$p = new T;$k = 1000000;$t = microtime(1);for($i=0; $i<$k; $i++) T::foo($i);echo '静态方法 ',microtime(1) - $t, PHP_EOL;$t1 = microtime(1);for($i=0; $i<$k; $i++) foo($i);echo '独立函数 ', microtime(1) - $t1, PHP_EOL;$t2 = microtime(1);for($i=0; $i<$k; $i++) $p->foo1($i);echo '对象方法 ', microtime(1) - $t2, PHP_EOL;
ログイン後にコピー
静的メソッド 0.203125
独立した関数 0.203125
オブジェクト メソッド 0.21875

独自の結論を導き出すことができます

Iそれはあなた次第だと思います どうやって比較しますか?

上記の比較方法は、比較対象のオブジェクト作成のパフォーマンスと時間の消費を除外したものです

オブジェクトの作成をループに入れると、オブジェクトメソッドの時間が長くなります

これは完全に個人的な意見です

# によると引数を3つ追加して、

$t3 = microtime(1);for($i=0; $i<$k; $i++) {  $p = new T;  $p->foo1($i);}echo '对象方法 ', microtime(1) - $t3, PHP_EOL;
ログイン後にコピー
静的メソッド 0.234375
独立関数 0.1875
オブジェクト メソッド 0.234375
オブジェクト メソッド 0.40625

は 4 倍にはなりません

初回: 静的メソッド 0.22201204299927 独立関数 0。 20401191711426 オブジェクトメソッド 0.25601506233215

2 回目: 静的メソッド 0.23101305961609 独立関数 0.20001196861267 オブジェクトメソッド 0.25701403617859
3回目:静的メソッド 0.22401285171509 独立関数 0.19801115989685 オブジェクトメソッド 0.256014823 91357
4回目:静的メソッド 0.22301316261292 独立関数 0.20001101493835 オブジェクトメソッド 0.25901484489441
5回目:静的メソッド 0.22701287269592 独立関数 0.19801211357117オブジェクトメソッド0.25701403617859
6回目:静的メソッド 0.22201204299927 独立関数 0.19901204109192 オブジェクトメソッド 0.26201510429382
7回目:静的メソッド 0.22201204299927 独立関数 0.2 0 001196861267 オブジェクトメソッド 0.25901484489441
8回目:staticメソッド 0.22301316261292 独立関数 0.19801092147827 オブジェクトメソッド 0.25801491737366
9回目:staticメソッド 0.22201204299927 独立関数 0.19801187515259 オブジェクトメソッド 0.26101493835449
10回目:静的メソッド 0.22201299667358 独立関数 0.20601105690002 オブジェクトメソッド 0.262014865 8 7524

ここでのテストの結果は次のとおりです。どう見ても、オブジェクト メソッドの方が少し時間がかかります。静的メソッド。おそらく作者はこういうことを言いたかったのだろう。

回数は気にせず、速いかどうかだけを気にします。

いずれにせよ、熱心にご参加いただきありがとうございました。

これらの 10 億分の 1 秒のことを非常に心配している場合は、そのままにしておいてください

あまりにも混乱している場合は、元のコードを自分で勉強して、状況を知ることができます

「クラス メソッドを次のように定義できれば、 static、「静的」と定義してみてください

この文によると、それは正しいです
しかし、「できる」とはどういう意味ですか?ほとんどのメソッドが静的になると、それはある意味オブジェクト指向の考え方ではなくなります

クラスとオブジェクトのより重要な考慮事項は、それらの間の継承と転送だと思います〜
上記は完全に私の個人的な意見です

Ifシングルトン モードを使用すると、オブジェクトは 1 回だけ新しくなります

また、2# 多くの時間と新しいオブジェクトの時間が消費されますが、これは無視できます
しかし、シングルトンについて言えば、静的メソッドよりもまだ少し遅いです。まだメモリが少し増えていますが、シングルトンは継承をサポートしています...

理論的には間違いなくそうですが、実際のパフォーマンスの違いは、今日のコンピューターでは明らかにそれほど明白ではありません。


Newクラス全体がオブジェクトとしてインスタンス化されます。それが静的メソッドの場合、クラスは名前空間と同等であり、その名前空間に属する関数を呼び出します

皆さんの熱心な支援と議論に感謝し、私は多くの恩恵を受けました

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート