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