PHPでメソッドをstaticとnonstaticに宣言することは可能ですか?
2023-10-24 08:13:49
質問
オブジェクト内のメソッドを、静的メソッドを呼び出す同名の非静的メソッドとして宣言することは可能ですか?
静的メソッド "send" と、その静的関数を呼び出す非静的メソッドを持つクラスを作成したいのですが、この場合、静的メソッドと非静的メソッドの両方を宣言することはできますか。例えば、以下のような感じです。
class test {
private $text;
public static function instance() {
return new test();
}
public function setText($text) {
$this->text = $text;
return $this;
}
public function send() {
self::send($this->text);
}
public static function send($text) {
// send something
}
}
この2つで関数を呼び出せるようにしたいのですが
test::send("Hello World!");
と
test::instance()->setText("Hello World")->send();
は可能でしょうか?
どのように解決するのですか?
あなたは
ができます。
を使うこともできますが、ちょっとやっかいです。オーバーロードでやらなければならない。
は
__call
と
__callStatic
というマジックメソッドがあります。
class test {
private $text;
public static function instance() {
return new test();
}
public function setText($text) {
$this->text = $text;
return $this;
}
public function sendObject() {
self::send($this->text);
}
public static function sendText($text) {
// send something
}
public function __call($name, $arguments) {
if ($name === 'send') {
call_user_func(array($this, 'sendObject'));
}
}
public static function __callStatic($name, $arguments) {
if ($name === 'send') {
call_user_func(array('test', 'sendText'), $arguments[0]);
}
}
}
これは、コードがわかりにくくなるため、理想的な解決策ではありませんが、PHP >= 5.3であれば動作します。
関連
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] JavaScriptのプライベートメソッド
-
[解決済み] リファレンス - このシンボルは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_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】新しいPHPMailerはPHPMailerAutoload.phpが必要?
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
-
[解決済み] PHP product.php?id=1 のような URL を作成する方法