問題タブ [magic-methods]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 「__classmagicメソッド」(カスタムコードによるクラス名への参照の仲介)
__get、__ callを使用して、呼び出しを一部のプロパティ/関数にリダイレクトできます。
クラスのためにそれを行う方法はありますか?
コード内のsome_class_nameのすべての言及をMY_VERSION_some_class_nameに変換したいと思います(1つのクラスだけでなく、パターンです)。
メソッド/プロパティがこの名前変更ポリシーのターゲットである場合、これは簡単です。
PHPのクラスでそれを行う方法を考えられますか?
編集:さまざまな状況でクラスのさまざまなバリアントを参照するためにこれが必要です。実行時に既知の条件に応じて、このクラスのさまざまなバリアントに解決され、セッション全体を通じて永続化される1つのクラス名が必要です。
ありがとう
psなぜ私がこれをやりたいのか知りたい場合は、アプリケーションのバリアントの保守を参照してください。
php - codeigniter での __call の使用に関するヘルプ
私はajaxのみを扱うコードイグナイターのクラスを持っています。このクラス内に、リフェラルが ajax リフェラルかどうかをチェックする関数を作成しました。このクラスの関数が使用されるたびに、この関数を呼び出せるようにしたいと考えています。
__call
そのため、魔法のメソッドを実装しました
現在のところ、ajaxCheck()
常に返さfalse
れますexit()
。しかし、それは呼び出されていません (現在、私の ajax リクエストはまだデータを返します) これは問題に取り組む有効な方法ですか?
php - 配列で__setを使用することは解決されましたが、なぜですか?
少し調べてみると、とにかくここですぐに尋ねる質問に対する答えに出くわしました。PHPのandmagicメソッドを介し__get
て配列をどのように操作しますか?__set
そのようなものを使用して値を設定しようとしたときはいつでも、$object->foo['bar'] = 42;
それを黙って破棄しているように見えました。
とにかく、答えは簡単です。メソッドは__get
単に参照によって戻る必要があります。そして、その前にアンパサンドを投げた後、それが十分に機能することを確認してください。
私の質問は、実際には、なぜですか?なぜこれが機能しているのか理解できないようです。__get
参照による戻りは__set
、多次元配列の操作にどのように影響しますか?
編集:ちなみに、PHP5.3.1を実行しています
php - 参照による__get()の操作
次のようなクラスの例では、次のようになります。
のインスタンスは、次のTest
ように出力をキックバックします。
bar
の要素foo
とのhello
要素bar
がターゲットになっていることを(前の例から)示して、アクセスされている配列の次元に関する詳細情報を取得する方法はありますか?
php - クラス内のオブジェクトの配列が設定されていません
だから私はこれらの2つのクラスを持っています。
と
そして、Salesman クラスにある $repdata オブジェクトに値を設定するのに苦労しています....
そのようです
$datatemp が正しく入力されていることはわかっていますが、セールスマン オブジェクト内の repdata オブジェクトを入力しようとすると、エラーは表示されませんが、何も入力されません。
私はこれを検索しようとしましたが、私が間違っていることを完全に突き止めることができませんでした. 私はJavaオブジェクトに精通していますが、phpと「魔法の」クラスは私の頭を回転させています。
どんな助けでも大歓迎です。
本当にありがとう。
php - Node.jsでPHPの__get()、__ set()、および__call()マジックメソッドを模倣します
NodeでPHPの魔法のメソッド__get()と__set()を模倣する方法があるかどうか疑問に思いました。この質問から:すべてのプロパティのJavaScriptゲッターRhinoで実行できることはわかっていますが、NodeはV8で構築されています。V8にはこれを行う方法がありますか?
php - PHP:5.2.xの__callStatic代替
だから私はPHP5.3へのアップデートを拒否するホスティングを持っています(これは迷惑ですが同時に問題ありません;私は柔軟性があります)が、本当に私を悩ませているのは__callStaticが利用できないことだけです。
単一のクラスに統合したいモジュールをロードしました(つまり、モジュールをロードし、メインクラスの__callStaticメソッドへの呼び出しを介してそれらのモジュールの関数にアクセスするクラスがあります)が、ローカルからアップロードした場合サーバーをサーバーにテストしましたが、明らかに__callStaticメソッドが機能しませんでした。
まだ静的な代替手段はありますか?registry::some_func()
クリーンなコードで、の代わりに二重コロン(つまり)を探すのが好きです$registry->some_func()
。
これのもう1つの欠点は、global
関数内でキーワードを使用することを余儀なくされていることです(これは、私自身の好みでは非常に厄介です)。
また、コードは非静的メソッドの代わりに静的メソッドを使用することで非常に高速になり、さらにクリーンになりました。
また、5.2では通常どおり__callStaticメソッドを記述してから、メソッドを明示的に呼び出すことを考えました。たとえばregistry::__callStatic("some_func"), array("val", "val2", "val3")
、5.3にアップグレードすると、移行がさらに簡単になります。この方法についての考えは?
ありがとう!
php - PHP __get および __set マジック メソッド
私が完全に間違っていない限り、 メソッド__get
と__set
メソッドは →get
とのオーバーロードを許可するはずset
です。
たとえば、次のステートメントは__get
メソッドを呼び出す必要があります。
そして、以下は__set
メソッドを使用する必要があります:
これは私のコードでは機能していませんでしたが、次の簡単な例で再現可能です:
これにより、次の結果のみが得られます。
そこにいくつかのdie()
呼び出しを入れると、まったくヒットしていないことがわかります。
今のところ、私はそれをねじ込み、__get
今のところ必要な場所で手動で使用していますが、それはあまり動的ではなく、特に呼び出されない限り「オーバーロードされた」コードが実際には呼び出されないという知識が必要です。これが私が理解しているように機能するはずがないのか、それともなぜ機能しないのかを知りたいです。
これは で実行されていphp 5.3.3
ます。
python - Python でのオブジェクトのロールバック、コピー オン ライト、バージョン管理されたプロキシなど
前提: Python object が与えられた場合obj
、それをランダムな関数に渡したいと思います。関数が完了したら、obj
元の状態にリセットするオプションが必要です。obj
さらに、他のコードが元の状態にアクセスする可能性があるため、実際の変更を行うことはできません。
最適なソリューションは、大規模なobj
ものがわずかに変更された一般的なケースでは迅速に行われる必要があります。obj
をロールバックする必要があるまれなケースのパフォーマンスはそれほど重要ではありません。
これらの要件は、単純にオブジェクトをコピーするというブルート フォース ソリューションとは直交しています。一般的なケースでは途方もなく遅く、まれなロールバックでは非常に高速です。
通常、このソリューションでは、オブジェクトを処理するコードがオブジェクトを通常のオブジェクトとして処理できるようにする必要があります。これには、カスタム クラスを含むあらゆる種類の属性の割り当てが含まれます。明らかに、ソリューションではオブジェクト ツリー全体を考慮する必要があります。いくつかの譲歩が必要な場合があります。これまでのソリューションで検討した制限の例には、非基本型がすべて特別な基本クラスから継承することを要求すること、タプルとカスタム dict クラスと引き換えに dict とリストを許可しないことが含まれます。大アルカナは許容される場合があります。
私はこれにしばらく取り組んできましたが、経験豊富な Python ウィザードがどのようなアイデアや提案を持っているかを知りたいと思っています。
編集:フレッドの答えにより、要件が欠落していることに気付きました:
obj
元の状態も価値があるため、元に変更を加えることはできません。
python - Pythonクラスの__dict__.__dict__属性は何ですか?
私がそうするならA.something = 10
、これはに行きますA.__dict__
。これは何<attribute '__dict__' of 'A' objects>
にA.__dict__.__dict__
あり、いつ何かが含まれていますか?