-1
$arr = NSZone::find_all(array('per_page'=>20, 'page'=>1));  

戻り結果は

 [0] => NSZone Object
        (
            [xml_skip_attribs:protected] => Array
                (
                    [0] => id
                )

            [vals:protected] => Array
                (
                    [total_count] => 3
                )
        )

彼はアクセスしています

arr[0]['vals:protected']['total_count'] in this way arr[0]->total_count()  

つまり、total_count()は関数ですが、配列構造によれば、配列インデックスのように見えます。 このコードを説明してください、どのように機能しますか?[vals:protected]とは何ですか。また、パブリック、プライベートなどにすることもできます。これ以上の説明がありますか?

4

2 に答える 2

2

出力によると、arr[0]はオブジェクト(NSZone)であり、明らかに、にtotal_count表示される値を返すメソッドがあります[total_count]

また、protectedスコープの解決が表示されていても、はクラスtotal_countの想定されるメンバー変数であるため、メソッドで使用できます。NSZonetotal_count

于 2012-04-26T04:23:49.453 に答える
2

これは配列ではなくprint_r($arr)NSZoneオブジェクトの配列です。クラスに含まれていない場合は、print_r($ arr)を使用するのと同じスコープでアクセスし、プロパティがprivate / protectedに設定されている場合、内の値にアクセスできません。オブジェクトの外側にある場合は、ある種のゲッターを追加するか、パブリックに変更する必要があります。

__get()マジックメソッドを使用しているクラスの場合、次のようにアクセスできます。 $arr->total_count;

または、取得するメソッドを追加して、次のようにアクセスすることもできます。$arr->getCount();

public function getCount(){
  return $this->vals->total_count;
}

でも、クラスを見ないと分からないので、完全に外に出ることができました。

于 2012-04-26T04:24:16.550 に答える