問題タブ [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 投票する
2 に答える
1872 参照

python - マジックメソッドの @StaticMethod または @ClassMethod 装飾

クラスのクラスメソッドになるようにマジックメソッドを装飾しようとしてい__getitem__ます。これが私が試したサンプルです。クラスメソッドまたは静的メソッドの装飾を使用してもかまいませんが、その方法がよくわかりません。これが私が試したものです:

ただし、電話をかけようとするとSettings['database']、次のエラーが発生します。

誰が私が間違っているのか教えてもらえますか。また、これを行うためのより良い方法があるかどうか、誰かが提案できますか? MetaClasses を使用してみましたが、ほとんど成功しませんでした (Python がよくわからないため)。

前もって感謝します。

0 投票する
4 に答える
6496 参照

php - PHP での __get/__set/__call のパフォーマンスに関する質問

私はカスタムビルドの MVC PHP フレームワークを持っており、それを書き直している最中で、パフォーマンスと魔法のメソッドについて質問がありました。フレームワークのモデル部分について、魔法のメソッドを使用するとパフォーマンスが大幅に低下するのではない__getかと考えていました。__setつまり、モデル データへのアクセス (読み取りと書き込み) は、実行される最も一般的な作業の 1 つになるということです。__get/マジック メソッドの使用__setは、MVC フレームワークのモデル部分のような頻繁に使用される機能に対してパフォーマンス ヒットが大きすぎますか?

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

php - __get()および__set()を使用してパブリック/プライベートプロパティをエミュレートしますか?

配列要素をマスター配列に格納および取得するために__get()、を使用するクラスを作成していました。__set()基本的にプライベートプロパティを再作成するために、いくつかの要素を取得できないようにするためのチェックを行いました。

__getクラスプロパティへのすべての呼び出しをインターセプトしているように見えることに気づきました。外の世界にプライベートな変数(getを介して利用できない)が欲しかったので、これは私にとってはひどいですが、クラス内からマスター配列を直接参照することによってそれにアクセスしようとしていました。もちろん、マスター配列はgettableプロパティのホワイトリストに含まれていません:(

とを使用するphpクラスでパブリックプロパティとプライベートプロパティをエミュレートする方法は__get()あり__set()ますか?

例:

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

php - PHP - Zend は Magic Methods を避けると言いますか?

私はこのページを読んでいました - http://deaduseful.com/blog/posts/50-php-optimisation-tips-revisited

推奨事項の 1 つは、Zend Performance PDF から引用された Magic Methods の使用を避けることでした。

Googleで検索した後(そしてここで無関係な質問にたどり着きました)、誰かがその面で推奨事項を持っているかどうか疑問に思いましたか?

私は自分のコードで __get() をよく使用します。通常は、常に使用するとは限らない変数を保存するためです。

name、dess、category_id、time_added のテーブルがあるかもしれません

私のgetは次のようになります。

必要な場合にのみデータベースから何かを取得し、配列をいじるのではなく $article->time_added のようなものを参照できるため、これは物事を行うための優れた方法のようです。

これは悪い習慣と見なされ、サーバーに余分な負荷がかかりますか?

多くの場合、魔法のメソッドでクラスを拡張し、子クラスが get の何かと一致しない場合にこのようなことを行います。

これは悪い習慣であり、パフォーマンスに悪いのでしょうか? 魔法のメソッドを拡張するときのレベルの最大数は 3 です。

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

php - Pythonと同等のPHP__call()マジックメソッド?

PHPでは、次のようなことができます。

これは、私が取り組んでいるプロジェクトに対してPythonで実行できると便利です(解析する厄介なXMLがたくさんあるので、それをオブジェクトに変換して、メソッドを呼び出すことができると便利です。

Pythonには同等のものがありますか?

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

php - __set と文字列の連結

これが可能かどうか疑問に思っています:

__set() マジック メソッドを使用して、クラスのプロパティに値を設定することに成功しました。

だから私はできる:

たとえば、文字列を連結したいときに問題が発生します。__set() が呼び出されていないようです (実際には呼び出されていません)。

これにより、「hello everyone」が出力されます。2 番目の割り当てで __set() を実行できません。php.net を読むと、次のように書かれています。

したがって、a_stringが既に存在するため、__set は呼び出されません。私の質問は最終的に...どうすればその連結操作を達成できますか??

注: わかりました... マーフィーが来て、私がこれを投稿するとすぐに答えをくれました...

答え (私が理解しているように) は、__get() メソッドを定義していないため、 a_stringが使用可能かどうかを PHP が判断できないということです。

__get() を定義すると、php はa_stringの現在の値を見つけ、 __set() を使用して値を連結できます。

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

python - モジュールに魔法のグローバルメソッドを追加する

Pythonロギングモジュールを使い始めていますが、すべてのメッセージに「root」と表示させたくない場合は、モジュールごとにロガーを作成する必要があり、それを何度も繰り返すのはちょっと面倒です。

__logger__()現在のモジュールのロガーを返し、必要に応じて作成する魔法のメソッドがあれば便利だと思っていました。__logger__括弧なしで呼び出すことができる魔法の変数はさらに良いでしょう。どうすればいいですか?

たとえば、fooという名前のモジュールで、を呼び出すことができ__logger__.debug('this is a debug message for the foo module')、コンソールに次のように表示されます。

DEBUG:foo:これはfooモジュールのデバッグメッセージです

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

php - PHP警告マジックメソッドset()class.XMLHttpRequest.php

完全に実行されるphpスクリプトがありますが、2つのエラーが発生します。

これは重要ですか?消えさせることはできますか?または修正しますか?

前もって感謝します!

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

cakephp - beforeFilter での CakePHP の奇妙な動作: 変数をビューに設定できません

さて、これにはいくつかのセットアップが必要です:

CakePHP を使用したブログの URL で、素敵な投稿タイトル「スラッグ」を使用する方法を検討しています。

例:/blog/post-title-hereの代わりに/blog/view_post/123.

投稿ごとに新しいメソッドを書くつもりはないのは明らかなので、CakePHP コールバックを使用して PHP 5 の__call()マジック メソッドの動作をエミュレートしようとしています。ご存じない方のために説明すると、CakePHP のディスパッチャーはメソッドが存在するかどうかを確認__call()し、コントローラーで呼び出す前に CakePHP エラーをスローします。

私がこれまでに行ったこと:

完全な開示のために(問題が発生した理由がわからないため)、2つのルートがあります。

これらは BlogPostsController のエイリアスを設定して、私の URL が次のようにならないようにします/blog_posts/action

次に、BlogPostsController で:

beforeFilter存在しないアクションをキャッチし、メソッドに渡しますsingle_postsingle_postモデルからデータを取得し$post、ビューの変数を設定します。

index最新の 10件の投稿を表示する方法もあります。

交絡部分は次のとおりです。

$this->render上記でコメントアウトされたメソッドがあることに気付くでしょう。

  1. を呼び出さない$this->render('single_post')と、ビューは 1 回レンダリングされますが、$post変数は設定されません。
  2. を呼び出すと、ビューは変数が設定された状態でレンダリングされ、設定されていない状態で再度レンダリングされます。つまり、同じドキュメント内で 2 つの完全なレイアウトを次々に取得します。内容のあるものとないもの。$this->render('single_post')$post

single_postという名前のメソッドとという名前のメソッドを使用してみました__single_postが、どちらも同じ問題を抱えています。__single_posturl で直接アクセスできないように、最終結果をメソッドという名前にすることをお勧めし/blog/single_postます。

また

投稿が存在しない場合のエラー処理をまだコーディングしていません (そのため、URL にランダムな内容を入力しても、single_post ビューが表示されません)。この問題を理解した後、私はそれを行う予定です。

0 投票する
6 に答える
923 参照

python - Perl 6のようなPythonの魔法のmain()署名

Pythonには、ボイラープレートを解析する多くの引数なしで、CLIユーティリティを簡単かつ迅速に作成する方法がありますか?

Perl 6では、MAINサブの署名はコマンドライン引数を自動的に解析します。

多くの定型文なしでPythonで同様のことを行う方法はありますか?ない場合、それを行うための最良の方法は何でしょうか?いくつかの内省を実行し、正しいことを行う関数デコレータを考えています。まだそのようなものがないのなら、私は以下のようなことを考えています。これは良い考えですか?