teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

スニペットがJavaScriptになってたので修正

2017/09/21 06:30

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -1,13 +1,15 @@
1
1
  tacsheavenさんやyambejpさんのようなロジック変更を行った方が良いかと思いますが、
2
2
  質問文のソースコードを極限までシンプルにするとこうなります。
3
3
 
4
- ```JavaScript
4
+ ```PHP
5
5
  // この書き方は規約でアウト扱いの可能性もあり
6
6
  function PCorPhone($ua){
7
7
  if (mb_strpos($ua, 'Window') === false) return 'designPhone.css';
8
8
  return 'designPC.css';
9
9
  }
10
+ ```
10
11
 
12
+ ```PHP
11
13
  // その場合はこっち
12
14
  function PCorPhone($ua){
13
15
  if (mb_strpos($ua, 'Window') === false) {
@@ -30,7 +32,7 @@
30
32
 
31
33
  なので下のようなアプローチが良いでしょうね。
32
34
 
33
- ```JavaScript
35
+ ```PHP
34
36
  function PCorPhone($ua){
35
37
  if (mb_strpos($ua, 'Window') === false) {
36
38
  return 'Phone';
@@ -42,7 +44,7 @@
42
44
  $css = "design{$device}.css";
43
45
  ```
44
46
 
45
- ```JavaScript
47
+ ```PHP
46
48
  function isPC($ua){
47
49
  if (mb_strpos($ua, 'Window') === false) {
48
50
  return false;

1

蛇足追加

2017/09/21 06:30

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -18,4 +18,38 @@
18
18
  ```
19
19
 
20
20
  所謂ガード説という対応です。
21
- さっさとreturn返して逃げれば一時変数も使わずに済んで万々歳ですね。
21
+ さっさとreturn返して逃げれば一時変数も使わずに済んで万々歳ですね。
22
+
23
+ ---
24
+
25
+ おまけ
26
+
27
+ PCorPhoneという関数を見て、他の人はどういう値を返す関数と想像するでしょうか?
28
+ まぁ大多数は文字列の`"PC"か"Phone"`なんだろうと想像するでしょうね。
29
+ ところが、実行すると返ってくるのが`"designPC.css"`なわけですよ。
30
+
31
+ なので下のようなアプローチが良いでしょうね。
32
+
33
+ ```JavaScript
34
+ function PCorPhone($ua){
35
+ if (mb_strpos($ua, 'Window') === false) {
36
+ return 'Phone';
37
+ }
38
+ return 'PC';
39
+ }
40
+
41
+ $device = PCorPhone($ua);
42
+ $css = "design{$device}.css";
43
+ ```
44
+
45
+ ```JavaScript
46
+ function isPC($ua){
47
+ if (mb_strpos($ua, 'Window') === false) {
48
+ return false;
49
+ }
50
+ return true;
51
+ }
52
+
53
+ $device = isPC($ua) ? 'PC' : 'Phone';
54
+ $css = "design{$device}.css";
55
+ ```