問題タブ [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 に答える
3148 参照

python - カスタム__getitem__メソッドの「key」引数がスライスであるかどうかを確認するためのpythonic/fastの方法は何ですか?

カスタムシーケンスタイプがあります。これは基本的にリストのラッパーとブールフラグであり、通常の不変のシーケンス動作をエミュレートしたかったのです。

私の問題はスライスです。Python 3でそれを実装する方法は、が単一のインデックスである__getitem__(key)場合はアイテムを返し、がスライスオブジェクトである場合はスライスされたシーケンスを返すメソッドを持つことであることを理解しています。しかし、これらのケースをどのように区別する必要がありますか?%key%key

基本的に2つの仮説があります。

でもこれは悪ですね。または

後者はよりパイソンに見えます。MyCustomSequenceType.__init__(self, datas, flag)len(datas)を呼び出すという事実に依存しているので、がであるTypeError場合%datasは発生しintegerます。しかし、その後、別のランダムな問題__init__を提起した場合、それは追跡できなくなります。TypeErrorまた、 http: //wiki.cython.org/enhancements/numpy/getitemisinstanceは、より高速な(実際にはより簡単に最適化できる)ヒントを示しています。

では、どうすればいいですか?

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

php - __sleep()マジックメソッドでPHPautloadingが失敗する

PHPのマジック__sleep()メソッドでクラスを自動ロードする際に問題が発生します。自動読み込みが行われないため、クラスが見つかりません。これをデバッグするために、呼び出しを試みましたspl_autoload_functions()。これにより、PHPがセグメンテーション違反を起こします...

以下のサンプルコードは、問題を示しています。インスタンスメソッドまたは静的メソッドを使用しても、同じ動作がします。これは、__destruct()代わりに使用する場合は問題なく機能するようです。これは、私のユースケースに適していますが、この背後にある理由については興味があります。それはPHPのバグですか、それとも賢明な説明がありますか?

Foo.php、オートロードターゲットと同じように

testcase.php

これは、両方のファイルをディレクトリに配置してを実行することで実行できますphp testcase.php。これは、PHP5.3.3および5.2.10で発生します。

0 投票する
9 に答える
125428 参照

php - ベストプラクティス:PHPマジックメソッド__setおよび__get

重複の可能性:
MagicメソッドはPHPのベストプラクティスですか?

これらは単純な例ですが、クラスに2つより多くのプロパティがあると想像してください。

ベストプラクティスは何でしょうか?

a)__getおよび__setを使用する

b)従来のセッターとゲッターを使用する

この記事の内容:http ://blog.webspecies.co.uk/2011-05-23/the-new-era-of-php-frameworks.html

著者は、魔法の方法を使用することは良い考えではないと主張しています。

まず第一に、当時はPHPの魔法の関数(__get、__ callなど)を使用することが非常に人気がありました。一見したところ何も問題はありませんが、実際には本当に危険です。それらはAPIを不明瞭にし、オートコンプリートを不可能にし、そして最も重要なことにそれらは遅いです。彼らのユースケースは、PHPをハックして、やりたくないことをすることでした。そしてそれはうまくいった。しかし、悪いことが起こりました。

しかし、これについてもっと意見を聞きたいと思います。

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

python - 静的な python getitem メソッドを作成するには?

これを機能させるには、何を変更する必要がありますか?

__getitem__type でメソッドを呼び出していることに注意してくださいA

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

php - クラスコンストラクターが連想配列のような引数を取ることができる魔法のクラス関数はありますか?

次のようなコードがあります。

これは私には少し冗長に思えます。このコンストラクターを取得するためにクラスにアドレスを書き込むことはできますか?

(はい、コンストラクターの括弧の間に配列を作成できることは知っています。ただ興味があります)

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

php - PHPUnit モック オブジェクトを使用して、魔法の __call() メソッドへの呼び出しを期待することは可能ですか?

テストでモック オブジェクトを取得しました。実際のオブジェクトである PageRepository は、__call() を使用して魔法のメソッドを実装しているため、$pageRepository->findOneByXXXX($value_of_field_XXXX) を呼び出すと、そのパラメーターに一致するレコードをデータベースで検索します。

そのメソッドをモックする方法はありますか?

実際のメソッド呼び出しは次のようになります。

テストは次のようになります。

しかし、うまくいきません。PHPUnit はメソッド呼び出しを認識しません。メソッドを表示する唯一の方法は、PageRepository でメソッドを明示的に定義することです。

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

php - PHPで__isset()マジックメソッドを実装する方法は?

メソッドによって返されるデータのような関数empty()を作成して操作しようとしています。isset()

私がこれまでに持っているもの:

使用法:

http://codepad.org/QuPNLYXP

次の場合に、空/issetがtrue/falseを返すようにするにはどうすればよいですか。

  • my_stuff上記が設定されていないか、次の場合は空またはゼロの値になりますempty()
  • メソッドが存在しません(とにかく致命的なエラーが発生すると思うので、必要かどうかはわかりません)

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

php - &__ get()が再び発行されます。大きな欲求不満が進行中

さて、私はかなりイライラしています。つまり、この問題が解決されたと思った、または以前にこれを正常に達成したことがあるからです。

簡単な準備:

  • PHP5.3.6。
  • エラー報告は11になりました(-1実際には、将来的に安全で、すべてのエラー/通知

私はクラスを持っています、それはリクエストパラメータを集約します。笑いのためにここに簡略化されたバージョンがあります:

とにかく、その理由arrg!は、何をしようとしても、$keyが存在しないときは常にエラーが発生するからです。私はもう試した:

if三項演算子は参照を生成できないと言われていますが、もちろんそれは機能しませんが、条件の試みからとにかくそれはわかっています。たとえば、次のようになります。

私はここで頭がおかしくなっています。おそらく私はこれを達成したシナリオを幻覚させました。(通知をスローせずに)これを正常に行うことはできませんか?


明確化:私が試したこと

前述の:

その他の試み:

0 投票する
0 に答える
17805 参照

php - JavaScript のマジック メソッド

JavaScriptの下に魔法の(アル)メソッドはありますか?

PHP :および&&にあるものと同様に、セッターゲッター、および呼び出し可能オブジェクト(関数/メソッド) に特に関心があります。__set__get__call__callStatic

私はグーグルでStackOverflowを検索していましたが、結果はありませんでした。

誰かに知らせてください - ありがとう!

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

php - 読み取り専用の多次元配列プロパティ、PHP

私はしばらくの間、 ArrayAccessPHPの魔法(__get、 )にだまされてきましたが、行き詰まっています。__set

配列であるいくつかのプロパティが読み取り専用であるクラスを実装しようとしています。これらはコンストラクターによって最初に設定されますが、その後は変更できません。

参照による魔法を使用__getして、プロパティの任意の深さの配列要素にアクセスできます。これらのプロパティがを介してターゲットにされている場合は、例外をスローできると考えてい__setました。

ただし、問題は、配列要素の値にアクセスしているときに、PHPが__get配列のその部分を参照によって返すように呼び出しているため、読み取りアクションか書き込みアクションかがわかりません。

最悪の部分は、これが発生することを知っていましたがArrayAccess、プロパティが実装されたオブジェクトのインスタンスであったことを考えると、可能な回避策としてだまされてきました)

簡単な例:

そして出力:

現実的には、とにかくfoo私の例のように)値だけが必要ですが、それが読み取りではなく書き込みアクションであることを知る必要があります。

私はこれが達成できないことをすでに半分受け入れていますが、それでも私は希望を持っています。誰かが私が達成しようとしていることをどのように行うことができるかについて何か考えがありますか?

で考えられるいくつかの回避策を検討してArrayAccessいましたが、私が知る限り、を呼び出すプロパティ表記を使用することを考えると、この場所に戻ることになります__get


更新: 。でもう1つの楽しい日ArrayAccess

これは別の問題ですが、うまくいくと思います。キックのためだけに投稿します。