質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

663閲覧

PHPで別インスタンスの関数を使うときの方法が知りたい

shimotani1028

総合スコア5

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/07/06 00:52

PHPでMVCの勉強をしており、以下に示すようなコードがあります。
AppクラスでRequestクラスとControllerクラスのインスタンスを作成し、call()で別のインスタンスから、他のインスタンスの関数を使いたい(今回はContollerからRequest)ときに
2つの方法を考えています。

方法①
・Appクラス内で自身の静的クラス$appを作って他のインスタンスを使いたいときはこの$appから参照する
方法②
・他のインスタンスを引数として渡す方法

このふたつの方法は以下のメリットがあると思っているのですが、他にメリットやデメリットはありますでしょうか?
もしくは使い分ける場面はありますでしょうか?

方法①のメリット
・いちいち引数を渡さなくてもよい
方法②のメリット
・用途の範囲を限定することができる

よろしくお願い致します。

PHP

1<?php 2// Your code here! 3class App 4{ 5 public static $app; 6 public Request $request; 7 public Controller $controller; 8 9 public function __construct() 10 { 11 self::$app = $this; 12 $this->request = new Request(); 13 $this->controller = new Controller(); 14 } 15 16 public function call() 17 { 18 $this->controller->call_hello1(); //①の場合 19 $this->controller->call_hello2($this->request); //②の場合 20 } 21} 22 23class Request 24{ 25 public function hello() 26 { 27 echo "hello"; 28 } 29} 30 31class Controller 32{ 33 public function call_hello1() //①の場合 34 { 35 App::$app->request->hello(); 36 } 37 public function call_hello2(Request $request) //②の場合 38 { 39 $request->hello(); 40 } 41 42} 43 44$app = new App(); 45$app->call();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/07/06 01:01 編集

Controllerクラスの下で下働きするクラスなら作るけど、別のControllerクラスを作る意味がピンと来ないのは私だけ? Controllerクラスに持たせたメソッドをよそで使いたいということであれば、その処理はControllerクラスに持たせるんじゃなくて、汎用処理用のクラスに持たせてそれぞれのControllerクラスから利用するべきなんじゃないの? Laravelのベストプラクティスを貼っておこう。https://github.com/alexeymezenin/laravel-best-practices/blob/master/japanese.md
shimotani1028

2022/07/06 01:27

ありがとうございます。 url見て勉強します。
guest

回答1

0

方法①はオブジェクト指向としてはありえないレベルで邪道です。
Appインスタンス2個以上必要な状況になったらどうするのって話になります。
そんなことはない、1つしか必要ないってことなら全部staticでいいじゃんってことになります。
(それができないならできないでシングルトンにしないと勝手に想定外のインスタンス作られて面倒なことになりかねない)

投稿2022/07/06 01:06

RiaFeed

総合スコア2703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shimotani1028

2022/07/06 01:38

ありがとうございます。 確かに全部staticでいいじゃんって思います。 もっとオブジェクト指向を勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問