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

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

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

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

Q&A

解決済

2回答

1699閲覧

PHPで定数を返す関数について

akabei

総合スコア21

PHP

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

0グッド

1クリップ

投稿2016/03/14 07:24

編集2016/03/14 10:01

PHPで定数を返す関数を記述する際、static変数を返すか変数をそのまま返すのでは
どちらがいいでしょうか?

自分ならこう記述するなどあれば教えていただけると助かります。

PHPのバージョンは「5.5.3」を想定しています。

PHP

1<?php 2class Hoge { 3 private static $array1 = ["111", "222", "333"]; 4 private static $array2 = ["444", "555", "666"]; 5 private static $array3 = ["777", "888", "999"]; 6 7 // static変数を返す 8 function get_array_static($no) { 9 if ($no == 1) { 10 return self::$array1; 11 } 12 else if ($no == 2) { 13 return self::$array2; 14 } 15 else if ($no == 3) { 16 return self::$array3; 17 } 18 return null; 19 } 20 21 // そのまま返す 22 function get_array_direct($no) { 23 if ($no == 1) { 24 return ["111", "222", "333"]; 25 } 26 else if ($no == 2) { 27 return ["444", "555", "666"]; 28 } 29 else if ($no == 3) { 30 return ["777", "888", "999"]; 31 } 32 return null; 33 } 34} 35 36$hoge = new Hoge(); 37$ary = $hoge->get_array_static(1); 38var_dump($ary); 39$ary = $hoge->get_array_direct(1); 40var_dump($ary);

※5.5系はarray()を[]でもいいんですね。勉強になります。

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

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

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

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

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

mpyw

2016/03/14 07:46

本題から脱線しますが,5.5系なら array( ) 使わずに [ ] に変えちゃっていいと思います.
guest

回答2

0

ベストアンサー

PHPの場合、配列はオブジェクトではなく、別な変数へ代入するだけで論理的には別な配列となります(実際のコピーは書き込みがあるまで遅延しますが)。つまり、外部的な動作はどちらでもまったく同じです。

PHP 5.6以上では配列定数を作れるのでそれも有効な手段ですが、5.5以前にはないので、同じ配列を1箇所しか使わないなら下手に変数化せず、配列直書きでいい気もします。

投稿2016/03/14 07:29

maisumakun

総合スコア145184

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

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

mpyw

2016/03/14 07:49

ちょっとした配列の生成コストは無に等しいので,同じものが何回も登場しない限りはバンバンリテラルとして書いちゃって全然問題ないと思います.直書きを支持します.
akabei

2016/03/14 10:20

なるほどどちらにしても呼び出し側の別な変数へ代入されるので動作はまったく同じなんですね。 定数なので別の箇所で利用することもないしそのまま返してよさそうですね。 ありがとうございます。スッキリしました。
guest

0

私の場合なら前者にする事が多い気がします。
後で編集してバランス調整したりする可能性があるデータの定義は
プログラムの中に分散していたり紛れ込んだりするような配置には
なるべくしないで、極力まとめて定義しておくようにした方が保守
性があがるように思います。

投稿2016/03/14 08:10

HiroshiWatanabe

総合スコア2160

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

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

akabei

2016/03/14 10:26

たしかに保守することを考えたらクラスの先頭に定数がまとまっていたほうがわかりやすいですね。 ここらへんは扱う定数によって変わってくるところなんでしょうか。 ありがとうございます。参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問