問題タブ [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.
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
は、より高速な(実際にはより簡単に最適化できる)ヒントを示しています。
では、どうすればいいですか?
php - __sleep()マジックメソッドでPHPautloadingが失敗する
PHPのマジック__sleep()
メソッドでクラスを自動ロードする際に問題が発生します。自動読み込みが行われないため、クラスが見つかりません。これをデバッグするために、呼び出しを試みましたspl_autoload_functions()
。これにより、PHPがセグメンテーション違反を起こします...
以下のサンプルコードは、問題を示しています。インスタンスメソッドまたは静的メソッドを使用しても、同じ動作がします。これは、__destruct()
代わりに使用する場合は問題なく機能するようです。これは、私のユースケースに適していますが、この背後にある理由については興味があります。それはPHPのバグですか、それとも賢明な説明がありますか?
でFoo.php
、オートロードターゲットと同じように
のtestcase.php
これは、両方のファイルをディレクトリに配置してを実行することで実行できますphp testcase.php
。これは、PHP5.3.3および5.2.10で発生します。
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をハックして、やりたくないことをすることでした。そしてそれはうまくいった。しかし、悪いことが起こりました。
しかし、これについてもっと意見を聞きたいと思います。
python - 静的な python getitem メソッドを作成するには?
これを機能させるには、何を変更する必要がありますか?
__getitem__
type でメソッドを呼び出していることに注意してくださいA
。
php - クラスコンストラクターが連想配列のような引数を取ることができる魔法のクラス関数はありますか?
次のようなコードがあります。
これは私には少し冗長に思えます。このコンストラクターを取得するためにクラスにアドレスを書き込むことはできますか?
(はい、コンストラクターの括弧の間に配列を作成できることは知っています。ただ興味があります)
php - PHPUnit モック オブジェクトを使用して、魔法の __call() メソッドへの呼び出しを期待することは可能ですか?
テストでモック オブジェクトを取得しました。実際のオブジェクトである PageRepository は、__call() を使用して魔法のメソッドを実装しているため、$pageRepository->findOneByXXXX($value_of_field_XXXX) を呼び出すと、そのパラメーターに一致するレコードをデータベースで検索します。
そのメソッドをモックする方法はありますか?
実際のメソッド呼び出しは次のようになります。
テストは次のようになります。
しかし、うまくいきません。PHPUnit はメソッド呼び出しを認識しません。メソッドを表示する唯一の方法は、PageRepository でメソッドを明示的に定義することです。
php - PHPで__isset()マジックメソッドを実装する方法は?
メソッドによって返されるデータのような関数empty()
を作成して操作しようとしています。isset()
私がこれまでに持っているもの:
使用法:
次の場合に、空/issetがtrue/falseを返すようにするにはどうすればよいですか。
my_stuff
上記が設定されていないか、次の場合は空またはゼロの値になりますempty()
- メソッドが存在しません(とにかく致命的なエラーが発生すると思うので、必要かどうかはわかりません)
?
php - &__ get()が再び発行されます。大きな欲求不満が進行中
さて、私はかなりイライラしています。つまり、この問題が解決されたと思った、または以前にこれを正常に達成したことがあるからです。
簡単な準備:
- PHP5.3.6。
- エラー報告は11になりました(
-1
実際には、将来的に安全で、すべてのエラー/通知)
私はクラスを持っています、それはリクエストパラメータを集約します。笑いのためにここに簡略化されたバージョンがあります:
とにかく、その理由arrg!
は、何をしようとしても、$key
が存在しないときは常にエラーが発生するからです。私はもう試した:
if
三項演算子は参照を生成できないと言われていますが、もちろんそれは機能しませんが、条件の試みからとにかくそれはわかっています。たとえば、次のようになります。
私はここで頭がおかしくなっています。おそらく私はこれを達成したシナリオを幻覚させました。(通知をスローせずに)これを正常に行うことはできませんか?
明確化:私が試したこと
前述の:
その他の試み:
php - JavaScript のマジック メソッド
JavaScriptの下に魔法の(アル)メソッドはありますか?
PHP :および&&にあるものと同様に、セッター、ゲッター、および呼び出し可能オブジェクト(関数/メソッド) に特に関心があります。__set
__get
__call
__callStatic
私はグーグルでStackOverflowを検索していましたが、結果はありませんでした。
誰かに知らせてください - ありがとう!
php - 読み取り専用の多次元配列プロパティ、PHP
私はしばらくの間、 ArrayAccess
PHPの魔法(__get
、 )にだまされてきましたが、行き詰まっています。__set
配列であるいくつかのプロパティが読み取り専用であるクラスを実装しようとしています。これらはコンストラクターによって最初に設定されますが、その後は変更できません。
参照による魔法を使用__get
して、プロパティの任意の深さの配列要素にアクセスできます。これらのプロパティがを介してターゲットにされている場合は、例外をスローできると考えてい__set
ました。
ただし、問題は、配列要素の値にアクセスしているときに、PHPが__get
配列のその部分を参照によって返すように呼び出しているため、読み取りアクションか書き込みアクションかがわかりません。
(最悪の部分は、これが発生することを知っていましたがArrayAccess
、プロパティが実装されたオブジェクトのインスタンスであったことを考えると、可能な回避策としてだまされてきました)
簡単な例:
そして出力:
現実的には、とにかくfoo
(私の例のように)値だけが必要ですが、それが読み取りではなく書き込みアクションであることを知る必要があります。
私はこれが達成できないことをすでに半分受け入れていますが、それでも私は希望を持っています。誰かが私が達成しようとしていることをどのように行うことができるかについて何か考えがありますか?
で考えられるいくつかの回避策を検討してArrayAccess
いましたが、私が知る限り、を呼び出すプロパティ表記を使用することを考えると、この場所に戻ることになります__get
。
更新: 。でもう1つの楽しい日ArrayAccess
。
(これは別の問題ですが、うまくいくと思います。キックのためだけに投稿します。)