ホームページ  >  記事  >  バックエンド開発  >  クラスメカニズムに関連する問題

クラスメカニズムに関連する問題

WBOY
WBOYオリジナル
2016-06-13 13:24:35727ブラウズ

クラスメカニズムの問題
前回の投稿は人気がなくなり、私が尋ねたい質問は解決されていません(おそらく明確に表現されていません)

まず 2 つのクラスから始めましょう。これら 2 つのクラスは主に異なるためです。ソースデータのソース

Test1 クラス

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
class test1{
 
    protected $arr = array();
 
    function __construct($arr){
        $this->arr = $arr;
    }
 
    function t1(){
        //use $this->arr
    }
 
    function t2(){
        //use $this->arr
    }
 
}



Test2 クラス
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
class test2{
 
    function get_arr(){
        //get $arr from data
        return $arr;
    }
 
    function t1(){
        //use $this->get_arr())
    }
 
    function t2(){
        //use $this->get_arr()
    }
 
}



この 2 つのクラスの違いは、
test1 はクラス属性に直接格納され、初期化取得
test2 は get_arr 関数を通じてファイルから取得される方法です。 🎜>
問題は、
1: test1 クラスのソース データ $arr に加えて、クラス内のすべての関数 (t1 など) が呼び出される場合、test2 (ソースデータ $arr は test1 の初期化時に利用可能ですが、test2 は get_arr を呼び出して初期化データ $arr を取得する必要があります) 違いは何ですか (効率とメモリの点のみ)。

2: 重要なことは、ページが t1 と t2 の両方を呼び出す場合、test1 クラスの arr データのコピーは 1 つだけ存在する必要があり、test2 データは get_arr が 2 つあるかどうかに関係なく 2 回呼び出すことです。メモリ $arr 配列? ? ?それならclass属性に入れればいいんじゃないでしょうか?

前回の投稿のアドレス




-----解決策----- ---- 両方の問題を簡単にテストできます

コピー オン ライトを理解していれば、配列を呼び出すだけではデータ メモリにコピーが発生しないことがわかります

しかし、メソッドと関数をクラス化するとき、演算値が変更され、元のデータを保存する必要がないため、当然 test1 の方が優れています。
test1 メソッドと同様の
関数 t(&$arr) は、大きなデータのコピーを避けるために作成されます。 。 。 。 PHPの設計は非常に巧妙です

------解決策------------------ ちなみに、2 番目のタイプは一般にキャッシュする必要があり、呼び出されるたびにファイルを直接読み取ることはできません。
違いはありません。

PHP コード
クラステスト2{ パブリック静的 $data = array(); 関数 get_arr(){ if(self::$data) は self::$data を返します。 // データから $arr を取得します $arr を返します。 } 関数 t1(){ // $this->get_arr()) を使用します } 関数 t2(){ // $this->get_arr() を使用します } }
<br>------解決策------------------<font color="#e78608"></font>
どちらのソリューションもあまり良くないと思いますが、<br>PHP コード
を組み合わせる方が良いでしょう。 クラステスト1{ 保護された$arr = array(); 関数 __construct(){ $this->arr = get_arr(); } 関数 get_arr(){ // データから $arr を取得します $arr を返します。 } 関数 t1(){ // $this->arr を使用 } 関数 t2(){ // $this->arr を使用 }
<div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。