問題タブ [late-static-binding]
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 - 未定義のクラス定数 'self::STRING'
私は完全に奇妙なバグで数日間苦労してきました:これがシナリオです(我慢してください):
F と呼ぶ「フレームワーク」クラスが 1 つあります。F を拡張するいくつかの単純なクラスがあり、そのうちの 1 つを P と呼びます。
だから私が持っているものは次のとおりです。
そして、私が電話すると、私にP::Consultar();
は意味のないこのエラーが表示されます:
Fatal error: Undefined class constant 'self::STRING' in [...]/F.inc.php on line X
X は _Tabela() メソッドの本体です。
ということで、変数名($_tabela)を変えてみました。get_called_class() でクラス名を保存してみました:
しかし、同じエラーが発生しました。
また、エラーメッセージはまったく役に立ちません。クラス定数にアクセスしようとしているのではなく、クラスの静的プロパティにアクセスしようとしています!
エラーメッセージをグーグルで検索しても、有用な結果は得られませんでした。
編集:答えてくれてありがとう!私は問題を発見しましたが、それは私が見ていたコードとは何の関係もありませんでした。P クラスの定義にエラーがあったことが判明したため、static::Consultar を呼び出そうとすると、PHP はクラスを解析し、エラーについて不平を言いました!
php - 遅延静的バインディング | `static` キーワードで親クラスを変更せずに
私は次の親子クラスを持っています。
php5.3 ではすでに予約済みのキーワードで静的レイト バインディングがサポートされているため、結果は期待どおりですstatic
。
static
しかし、問題は、親クラスへの書き込みアクセス権がないため、呼び出し中に使用できないためmethode_one
、遅延静的バインディングを実行していないことです。
オーバーライドメソッドにアクセスできる方法はありますか?
親クラスは定義済みのライブラリであり、変更できません。
解決策は、親クラスを変更するか、この考えを完全に削除することですが、他の代替案を提案できますか?
php - 親関数からの静的変数アクセスによる遅延静的バインディングを防止する
次のクラス階層があるとします。
生成される出力は、次のエラー メッセージ
Fatal error: Cannot access property ChildClass::$_test
です。上書きされていない親クラスの関数を呼び出しているので、上記のようなことをしてもいいような気がします。
php - PHP の OOP 手順に関する明確化の要求
PHPで次のコードを記述しようとしています
返してはいけませんI am B
か?oop PHP では、子は親を上書きしませんか? 説明ありがとうございます。
==編集==
また、私の質問は、インスタンスでは機能するため、静的とインスタンスの違いは何ですか:
php - 親クラスの子クラスに静的プロパティが存在するかどうかを確認します (遅延静的バインディング)。
親クラスのコード:
これは、子クラスに $_aReadOnlyDatabaseTables が定義されている場合に機能しますが、$_aReadOnlyDatabaseTables が存在しない場合はエラーになります。このプロパティが最初に存在するかどうかを確認する必要があります。
私はそれが次のようになるべきだと思います:
しかし、これは構文エラーをスローしますunexpected ',', expecting T_PAAMAYIM_NEKUDOTAYIM
。$this
の代わりに使用しstatic
ても機能せず、常に false と評価されます。
これの適切な構文は何ですか?
php - PHP の遅延静的バインディングが正しく機能しない
PHP で遅延静的バインディングをコーディングして使用しているときに、奇妙な動作を見つけました。static()
親クラスで作成された子オブジェクトは、親のプライベート メソッドにアクセスできます。
次に例を示します。
出力:
これは正しい動作ですか?
php - Late Static Binding を利用する PHP C 拡張
PHP C拡張内で遅延静的バインディングを利用する方法を理解しようとしています.
例、このメソッドを再作成したい:
Zend Engine を使用してこれを実現するにはどうすればよいでしょうか?
編集:
私は最終的に答えを得ました(http://www.kchodorow.com/blog/2011/08/11/php-extensions-made-eldrich-classes/から)、私の create メソッド内にこれがあります:
:) ありがとう。
php - 継承と LSB に関する PHP の問題
次の問題があります。
A
簡単に言うと、静的メッセージを出力するメソッドを定義します$_greetings
。このメッセージはA::set( classname )
、静的パラメーターも含むクラスの名前を入力に受け取るを使用して設定されます$_greetings
。say()
次に 2 つの子が来て、継承された static を使用して挨拶する独自のメソッドを定義しますhi()
。出力は次のようになると思います。
しかし、代わりに私は得る:
その理由が知りたい…!? 問題を理解するために時間をかけてくれる人たちに、前もって感謝します:)