PHP traits - 汎用定数の定義
2023-10-06 10:37:30
質問
名前空間内の多くのクラスで使用される可能性のある定数を定義するための最良の方法は何でしょうか?私はあまり多くの継承を避けようとしているので、基底クラスを拡張することは理想的な解決策ではありません。PHP 5.4でこれはどうにか可能なのでしょうか、それとも別のアプローチを取るべきなのでしょうか?
私は次のような状況です。
trait Base
{
// Generic functions
}
class A
{
use Base;
}
class B
{
use Base;
}
問題は、PHPのtraitで定数を定義することができないことです。理想を言えば、以下のようなものが欲しいところです。
trait Base
{
const SOME_CONST = 'someconst';
const SOME_OTHER_CONST = 'someotherconst';
// Generic functions
}
そして、これらは、特質を適用するクラスからアクセスすることができます。
echo A::SOME_CONST;
echo B::SOME_OTHER_CONST;
しかし、traitの制限のため、これは不可能です。何かアイデアはありませんか?
どのように解決するのですか?
結局 ユーザセクタスの提案 を使うことにしました。これは、これを扱うのに最も問題の少ない方法のように感じられます。API コントラクトではなく定数を格納するためにインターフェイスを使用するのは、悪い臭いがするので、この問題はトライットの実装よりも OO デザインに関するものなのかもしれません。
interface Definition
{
const SOME_CONST = 'someconst';
const SOME_OTHER_CONST = 'someotherconst';
}
trait Base
{
// Generic functions
}
class A implements Definition
{
use Base;
}
class B implements Definition
{
use Base;
}
を可能にするものです。
A::SOME_CONST;
B::SOME_CONST;
関連
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み] [Solved] Fatal error: 非オブジェクトのメンバ関数fetch_assoc()の呼び出し [重複]。
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】トレイトとインターフェイスの比較
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み】mysqli::query(): mysqli をフェッチできない