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

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

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

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

Q&A

解決済

6回答

183閲覧

もっと簡潔にできると思うのですが…。

chabiribon

総合スコア22

PHP

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

0グッド

0クリップ

投稿2017/09/21 02:41

function PCorPhone($ua){ if(mb_strpos($ua,'Android')===false){ $css = 'designPC.css'; } if(mb_strpos($ua,'iPhone')===false){ $css = 'designPC.css'; } if(mb_strpos($ua,'iPad')===false){ $css = 'designPC.css'; } if(mb_strpos($ua,'Window')===false){ $css = 'designPhone.css'; } return $css; }

PCとスマホでアクセスしたのを区別するプログラムを書いたのですが、もっと簡潔な書き方がありませんか?
アドバイスいただけると助かります。よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/09/21 03:30

Windows Phone, BlackBerry を忘れないで上げて
guest

回答6

0

ベストアンサー

PCとスマホの切り分け条件は、ユーザーエージェント(以下 UA)に、
・Android か iPhone か iPad の文字列があれば、スマホ用
・Windows があれば PC 用
でしょうか?

提示されたソースの場合、Android も iPhone も iPad も Windows もない(例えば Mac からだったり Linux 機だったり)場合、$css が未定義のままですから、意図しない表示になるはずです。

上の切り分け条件をちょっと変えて
・Android か iPhone か iPad の文字列があれば、スマホ用
・そうでなければ PC 用
であれば、こういう感じになります。

PHP

1function PCorPhone($ua) { 2 $css = 'designPC.css'; 3 if (preg_match(/(Android|iPhone|iPad)/, $ua) === 1) { 4 $css = 'designPhone.css'; 5 } 6 return $css; 7}

投稿2017/09/21 02:56

tacsheaven

総合スコア13703

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

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

chabiribon

2017/09/21 03:01

なるほど!preg_matchを使えば簡潔ですね!ありがとうございます。早速やってみます。
chabiribon

2017/09/21 04:32

こちらの回答を参考に作成したところ無事にできました!また、いろいろな意見を聞けてとても参考になりました。皆さんありがとうございました!
guest

0

PHP

1function PCorPhone($ua){ 2 if(mb_strpos($ua,'Window')===false){ 3 $css = 'designPhone.css'; 4 } else { 5 $css = 'designPC.css'; 6 } 7 return $css; 8}

投稿2017/09/21 02:50

ttyp03

総合スコア16998

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

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

chabiribon

2017/09/21 02:52

あ!そうか!なるほど。確かにこれなら簡潔ですね!
yambejp

2017/09/21 02:55

Window以外がPhoneはさすがに乱暴すぎでは?
ttyp03

2017/09/21 02:57

そうかもしれませんが、提示されたコードを単純に簡潔にしただけですので。
guest

0

まずもって、このコードでは狙ったとおりに動きません。たとえば、macOSのSafariは以下のようなユーザーエージェントを返します。

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36

最後のWindow条件に引っかかって、パソコンなのに'designPhone.css'を返してしまいます。

こういったものは、自分で書くより既存のライブラリを使ったほうが楽で確実だと思います。

投稿2017/09/21 02:51

maisumakun

総合スコア145183

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

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

chabiribon

2017/09/21 02:55

このままではmacOSに対応できていないのですね?既存のライブラリとはどのようなものでしょうか?
guest

0

$cssのデフォ値が設定されていないですね
またifが排他的になっていないので常に後者で上書きされています。
基本をdesignPC.cssとして、特定の時designPhone.cssにするとよいのでは?

PHP

1 2function PCorPhone($ua){ 3 $css = preg_match('/Android|iPhone|iPad/',$ua)?'designPhone.css':'designPC.css'; 4 return $css; 5} 6```;

投稿2017/09/21 02:48

yambejp

総合スコア114784

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

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

chabiribon

2017/09/21 03:16

なるほど、参考になります。ありがとうございます。
guest

0

tacsheavenさんやyambejpさんのようなロジック変更を行った方が良いかと思いますが、
質問文のソースコードを極限までシンプルにするとこうなります。

PHP

1// この書き方は規約でアウト扱いの可能性もあり 2function PCorPhone($ua){ 3 if (mb_strpos($ua, 'Window') === false) return 'designPhone.css'; 4 return 'designPC.css'; 5}

PHP

1// その場合はこっち 2function PCorPhone($ua){ 3 if (mb_strpos($ua, 'Window') === false) { 4 return 'designPhone.css'; 5 } 6 return 'designPC.css'; 7}

所謂ガード説という対応です。
さっさとreturn返して逃げれば一時変数も使わずに済んで万々歳ですね。


おまけ

PCorPhoneという関数を見て、他の人はどういう値を返す関数と想像するでしょうか?
まぁ大多数は文字列の"PC"か"Phone"なんだろうと想像するでしょうね。
ところが、実行すると返ってくるのが"designPC.css"なわけですよ。

なので下のようなアプローチが良いでしょうね。

PHP

1function PCorPhone($ua){ 2 if (mb_strpos($ua, 'Window') === false) { 3 return 'Phone'; 4 } 5 return 'PC'; 6} 7 8$device = PCorPhone($ua); 9$css = "design{$device}.css";

PHP

1function isPC($ua){ 2 if (mb_strpos($ua, 'Window') === false) { 3 return false; 4 } 5 return true; 6} 7 8$device = isPC($ua) ? 'PC' : 'Phone'; 9$css = "design{$device}.css";

投稿2017/09/21 03:52

編集2017/09/21 06:30
miyabi-sun

総合スコア21158

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

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

0

解決しました。これで今のところ上手くいっています。ありがとうございました。

//パソコンかスマホかを判断する関数 function PCorPhone($ua){ $pattern = "/(Android|iPhone|iPad)/"; $css = 'designPC.css'; if(preg_match($pattern, $ua) === 1){ $css = 'designPhone.css'; } return $css; }

投稿2017/09/21 06:33

chabiribon

総合スコア22

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

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

yambejp

2017/09/21 09:23

一応念のため今回のパターンにカッコは要らないです
chabiribon

2017/09/21 09:25

そうなんですね。まだまだ理解不足で…。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問