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

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

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

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

Q&A

解決済

2回答

4930閲覧

PHPはシングルスレッドなのに無駄にインスタンスをnewする必要ありますか?

HIGEMARUSHI

総合スコア12

PHP

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

0グッド

2クリップ

投稿2017/02/21 07:37

編集2017/02/21 07:38

###聞きたいこと
PHPの実行環境はほとんどApache(or Nginx)のWEBサーバと連動して動作するものかと思います。

リクエスト毎にファイルが読み込まれる為、クラス変数(public static $hoge)・メソッドを定義しても、ほかのリクエストから参照・呼び出しできません。

他のリクエストから参照・呼び出しできないのであれば、クラスを読み込んだ時点でそのクラスをnewしてるようなものだと思います。

リクエスト内で、複数インスタンスを作成する必要がないクラスであれば、わざわざインスタンスをnewせずに、クラス変数とクラスメソッドだけあれば十分かと思いますが、解釈としてあっていますでしょうか。

ApacheWebサーバ上で動くPHPに関して、どういった要件のものをインスタンスとして作成(new)するのが望ましいのでしょうか。また、わざわざインスタンスにする必要がない要件など、ご教授お願いできればと思います。

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

自分で最初から作っているのであれば、「お好きなように」以上のことは言えません(ただし、モジュール性・テストのしやすさを考慮すると、クラスメソッドなどが不利になる点はあります)。

ただ、現実問題として、フレームワークを使った開発を行っていると、フレームワークの流儀に従うほかない、という部分があります。実際、CakePHPで使うヘルパーはインスタンス変数すら持たないものもありますが、それでもインスタンス化してから使うほかありません。

投稿2017/02/21 08:25

maisumakun

総合スコア145123

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

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

HIGEMARUSHI

2017/02/22 01:53

回答ありがとうございます。 DBに対してデータの格納と抽出、あと検証をするだけのAPIサーバを作るには今の流行りのフレームワークは1リクエストに対してちょっと読み込む量が多すぎるような気がしてます。 (汎用的に作られているフレームワークなのでしょうがないと思いますが、もう少し用途によって特化したフレームワークが流行ってもいい気がします。) そこで、自作でつくるとしたときに、複数インスタンス化する必要のないものに対してクラス定義読み込んだ上にインスタンスまで作るのはちょっと無駄なのかと思い質問させて頂きました。 今時のインフラ構成だと、負荷が高くなったらオートスケールで台数増やせばいいだけなので、要求的には低スペックなサーバ(AWSのt2.nano)でさばけるリクエスト数を上げたかったからです。
maisumakun

2017/02/22 02:18

フレームワークから選ぶとしても軽さ優先ならCodeIgniterとか、Cエクステンションで実装されたPhalconとか、重量級にならない選択肢はあります。 ファイル数については、Opcacheを使えばロード&PHPへの翻訳が1度で済むので、速度的にもそこまで気にしなくて良くなります。
guest

0

クラスの使用目的がインスタンス化しなくても実現できるものであるなら、別に構わないと思いますし、むしろ使用方法が簡易化されてよいのではないでしょうか。
インスタンス化するべきもの、例えばデータベースを管理するクラスがあったとして、2つのデータベースを使いたい場合は、データベース別にインタンス化する必要がありますよね。
用途に応じて使い分ければ良いだけの話だと思います。
逆に静的メソッド・変数ばかりであるなら、それはクラス化の必要がありますか?
同じ機能のあつまりをクラスとして定義するのか、ファイル別で分けて管理するのか、またはそれ以外の方法を用いるのか。
質問者様が使いやすいようにすればよいと思います。

投稿2017/02/22 01:17

ttyp03

総合スコア16996

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

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

HIGEMARUSHI

2017/02/22 02:09

回答ありがとうございます。 DBの接続先を複数もつ要件の場合も、管理クラスのクラス変数に配列でPDOインスタンスを複数持つことで実現できてしまいます。 ある程度機能としてまとめたいのと、オートローダー機能を使うのにクラス化は必要な要件なのです。 USEとかrequireとかも無駄に書きたくないんです。 でも結局は自分の好きなようにですよね。
ttyp03

2017/02/22 02:39

複数PDOを管理するクラス設計であるならそれでもいいと思います。 1PDOを管理するクラス設計であるなら、インスタンスを複数作成することになります。 私なら恐らくPDOを複数管理すると処理が煩雑になりそうなので、そうはしませんね。 結局は設計次第、使う人の使いやすさ次第ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問