問題タブ [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.

0 投票する
3 に答える
229 参照

php - 「__classmagicメソッド」(カスタムコードによるクラス名への参照の仲介)

__get、__ callを使用して、呼び出しを一部のプロパティ/関数にリダイレクトできます。

クラスのためにそれを行う方法はありますか?

コード内のsome_class_nameのすべての言及をMY_VERSION_some_class_nameに変換したいと思います(1つのクラスだけでなく、パターンです)。

メソッド/プロパティがこの名前変更ポリシーのターゲットである場合、これは簡単です。

PHPのクラスでそれを行う方法を考えられますか?

編集:さまざまな状況でクラスのさまざまなバリアントを参照するためにこれが必要です。実行時に既知の条件に応じて、このクラスのさまざまなバリアントに解決され、セッション全体を通じて永続化される1つのクラス名が必要です。

ありがとう

psなぜ私がこれをやりたいのか知りたい場合は、アプリケーションのバリアントの保守を参照してください。

0 投票する
2 に答える
2478 参照

php - codeigniter での __call の使用に関するヘルプ

私はajaxのみを扱うコードイグナイターのクラスを持っています。このクラス内に、リフェラルが ajax リフェラルかどうかをチェックする関数を作成しました。このクラスの関数が使用されるたびに、この関数を呼び出せるようにしたいと考えています。

__callそのため、魔法のメソッドを実装しました

現在のところ、ajaxCheck()常に返さfalseれますexit()。しかし、それは呼び出されていません (現在、私の ajax リクエストはまだデータを返します) これは問題に取り組む有効な方法ですか?

0 投票する
3 に答える
1597 参照

php - 配列で__setを使用することは解決されましたが、なぜですか?

少し調べてみると、とにかくここですぐに尋ねる質問に対する答えに出くわしました。PHPのandmagicメソッドを介し__getて配列をどのように操作しますか?__setそのようなものを使用して値を設定しようとしたときはいつでも、$object->foo['bar'] = 42;それを黙って破棄しているように見えました。

とにかく、答えは簡単です。メソッドは__get単に参照によって戻る必要があります。そして、その前にアンパサンドを投げた後、それが十分に機能することを確認してください。

私の質問は、実際には、なぜですか?なぜこれが機能しているのか理解できないようです。__get参照による戻りは__set、多次元配列の操作にどのように影響しますか?

編集:ちなみに、PHP5.3.1を実行しています

0 投票する
3 に答える
1999 参照

php - 参照による__get()の操作

次のようなクラスの例では、次のようになります。

のインスタンスは、次のTestように出力をキックバックします。

barの要素fooとのhello要素barがターゲットになっていることを(前の例から)示して、アクセスされている配列の次元に関する詳細情報を取得する方法はありますか?

0 投票する
2 に答える
232 参照

php - クラス内のオブジェクトの配列が設定されていません

だから私はこれらの2つのクラスを持っています。

そして、Salesman クラスにある $repdata オブジェクトに値を設定するのに苦労しています....

そのようです

$datatemp が正しく入力されていることはわかっていますが、セールスマン オブジェクト内の repdata オブジェクトを入力しようとすると、エラーは表示されませんが、何も入力されません。

私はこれを検索しようとしましたが、私が間違っていることを完全に突き止めることができませんでした. 私はJavaオブジェクトに精通していますが、phpと「魔法の」クラスは私の頭を回転させています。

どんな助けでも大歓迎です。

本当にありがとう。

0 投票する
3 に答える
7189 参照

php - Node.jsでPHPの__get()、__ set()、および__call()マジックメソッドを模倣します

NodeでPHPの魔法のメソッド__get()と__set()を模倣する方法があるかどうか疑問に思いました。この質問から:すべてのプロパティのJavaScriptゲッターRhinoで実行できることはわかっていますが、NodeはV8で構築されています。V8にはこれを行う方法がありますか?

0 投票する
1 に答える
1688 参照

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にアップグレードすると、移行がさらに簡単になります。この方法についての考えは?

ありがとう!

0 投票する
8 に答える
179330 参照

php - PHP __get および __set マジック メソッド

私が完全に間違っていない限り、 メソッド__get__setメソッドは →getとのオーバーロードを許可するはずsetです。

たとえば、次のステートメントは__getメソッドを呼び出す必要があります。

そして、以下は__setメソッドを使用する必要があります:

これは私のコードでは機能していませんでしたが、次の簡単な例で再現可能です:

これにより、次の結果のみが得られます。

そこにいくつかのdie()呼び出しを入れると、まったくヒットしていないことがわかります。

今のところ、私はそれをねじ込み、__get今のところ必要な場所で手動で使用していますが、それはあまり動的ではなく、特に呼び出されない限り「オーバーロードされた」コードが実際には呼び出されないという知識が必要です。これが私が理解しているように機能するはずがないのか、それともなぜ機能しないのかを知りたいです。

これは で実行されていphp 5.3.3ます。

0 投票する
2 に答える
555 参照

python - Python でのオブジェクトのロールバック、コピー オン ライト、バージョン管理されたプロキシなど

前提: Python object が与えられた場合obj、それをランダムな関数に渡したいと思います。関数が完了したら、obj元の状態にリセットするオプションが必要です。objさらに、他のコードが元の状態にアクセスする可能性があるため、実際の変更を行うことはできません。


最適なソリューションは、大規模なobjものがわずかに変更された一般的なケースでは迅速に行われる必要があります。objをロールバックする必要があるまれなケースのパフォーマンスはそれほど重要ではありません。

これらの要件は、単純にオブジェクトをコピーするというブルート フォース ソリューションとは直交しています。一般的なケースでは途方もなく遅く、まれなロールバックでは非常に高速です。

通常、このソリューションでは、オブジェクトを処理するコードがオブジェクトを通常のオブジェクトとして処理できるようにする必要があります。これには、カスタム クラスを含むあらゆる種類の属性の割り当てが含まれます。明らかに、ソリューションではオブジェクト ツリー全体を考慮する必要があります。いくつかの譲歩が必要な場合があります。これまでのソリューションで検討した制限の例には、非基本型がすべて特別な基本クラスから継承することを要求すること、タプルとカスタム dict クラスと引き換えに dict とリストを許可しないことが含まれます。大アルカナは許容される場合があります。

私はこれにしばらく取り組んできましたが、経験豊富な Python ウィザードがどのようなアイデアや提案を持っているかを知りたいと思っています。


編集:フレッドの答えにより、要件が欠落していることに気付きました:obj元の状態も価値があるため、元に変更を加えることはできません。

0 投票する
3 に答える
88363 参照

python - Pythonクラスの__dict__.__dict__属性は何ですか?

私がそうするならA.something = 10、これはに行きますA.__dict__。これ<attribute '__dict__' of 'A' objects>A.__dict__.__dict__あり、いつ何かが含まれていますか?