3

私はget_object_varsしばらく使用しています..常にオブジェクトのパブリックプロパティのみを返しますが、突然保護された変数も返します?!? それはどうしてですか?それは今までになかった

コード

print_r($row);
print_r(get_object_vars($row));

戻り値

Data_model_Accounting Object
(
    [get_external:protected] => 1
    [put_external:protected] => 1
    [delete_external:protected] => 1
    [post_class:protected] => 1
    [external_field_const:protected] => Array
        (
            [type] => Array
                (
                    [0] => LEDGER
                    [1] => DEBTOR_LEDGER
                    [2] => CREDITOR_LEDGER
                    [3] => DEBTOR_INVOICE
                    [4] => CREDITOR_INVOICE
                )

        )

    [external_field_condition_unset:protected] => Array
        (
            [invoice_id_] => Array
                (
                    [type] => Array
                        (
                            [mode] => not_in
                            [values] => Array
                                (
                                    [0] => DEBTOR_INVOICE
                                    [1] => CREDITOR_INVOICE
                                )

                        )

                )

            [invoice_time_due] => Array
                (
                    [type] => Array
                        (
                            [mode] => not_in
                            [values] => Array
                                (
                                    [0] => DEBTOR_INVOICE
                                    [1] => CREDITOR_INVOICE
                                )

                        )

                )

        )

    [table:protected] => 
    [predata:protected] => Array
        (
        )

    [data:protected] => Array
        (
        )

    [external:protected] => 1
    [put_error:protected] => 
    [action_mode:protected] => 
    [Shell:protected] => 
    [access_admin_primary:protected] => 1
    [get_admin_external:protected] => 
    [put_admin_external:protected] => 
    [delete_admin_external:protected] => 
    [id] => 19
    [time] => 1362787200
    [type] => DEBTOR_LEDGER
    [account_id_] => 16000
    [account_name] => Debitor
    [accountoff_id_] => 16000
    [accountoff_name] => Debitor
    [vatcode_name] => 
    [subaccount_id_] => 10
    [subaccount_type] => DEBTOR
    [subaccount_name] => hehe
    [subaccountoff_id_] => 101
    [subaccountoff_type] => DEBTOR
    [subaccountoff_name] => oskel
    [dimension_name] => 
    [dimensionoff_name] => 
    [currency_name] => 
    [invoice_id_] => 
    [invoice_time_due] => 0
    [amount] => -165
    [currency_amount] => -165
    [currency_rate] => 1
)
Array
(
    [table] => 
    [predata] => Array
        (
        )

    [data] => Array
        (
        )

    [external] => 1
    [put_error] => 
    [action_mode] => 
    [Shell] => 
    [access_admin_primary] => 1
    [get_admin_external] => 
    [put_admin_external] => 
    [delete_admin_external] => 
    [id] => 19
    [time] => 1362787200
    [type] => DEBTOR_LEDGER
    [account_id_] => 16000
    [account_name] => Debitor
    [accountoff_id_] => 16000
    [accountoff_name] => Debitor
    [vatcode_name] => 
    [subaccount_id_] => 10
    [subaccount_type] => DEBTOR
    [subaccount_name] => hehe
    [subaccountoff_id_] => 101
    [subaccountoff_type] => DEBTOR
    [subaccountoff_name] => oskel
    [dimension_name] => 
    [dimensionoff_name] => 
    [currency_name] => 
    [invoice_id_] => 
    [invoice_time_due] => 0
    [amount] => -165
    [currency_amount] => -165
    [currency_rate] => 1
)
4

2 に答える 2

3

いいえ、これは新しい動作ではなく、一晩でコンピューターに送信された動作でもありません。

ドキュメントから:

スコープ内の指定されたオブジェクトの定義済みオブジェクト アクセス可能な非静的プロパティの連想配列を返します。

アクセスレベルについては言及されていません。

ただし、同じドキュメントページに次のコメントを残したユーザーによって報告された、可視性と範囲に帰着する文書化されていない側面があります

これはスコープに依存するという事実に注意してください。これをオブジェクト独自のメソッドから呼び出している場合は、プライベート変数と保護変数も出力されます。オブジェクトの外部から呼び出すと、アーカイブしたい結果が得られる可能性が高くなります。

ドキュメントはあなたの友達です。それを使用してください

于 2013-02-10T21:04:19.353 に答える
0

どのバージョンの PHP を使用していますか?

Data_model_Accounting::method 内で get_object_vars を呼び出している場合、保護されたプロパティが表示されるはずです。

于 2013-02-10T21:37:22.713 に答える