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

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

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

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

Q&A

解決済

5回答

383閲覧

phpが解読できない箇所があります

banianizm

総合スコア92

PHP

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

0グッド

1クリップ

投稿2018/09/19 02:49

phpでカレンダー作成しています。
完成したのですが、ソースコードで解読できない箇所があります。
恐縮ですが解説か参考サイト教えていただければと思います。

php

1<html> 2<head> 3</head> 4<body> 5<center> 6 <table border="1"> 7<?php 8 // 年月を取得する。グローバル変数。 9 $y = $_REQUEST['y'] ?? date("Y"); 10 $m = $_REQUEST['m'] ?? date("m"); 11 12 // 1日の曜日を取得。mktimeは時・分・秒・月・日・年の順に表記 13 $wd1 = date("w", mktime(0, 0, 0, $m, 1, $y)); 14 15 // 年とりあえず同じ年 16 $prevY = $nextY = $y; 17 18 // 一ヶ月前。1より小さければ12にして1年下げる。 19 $prevM = $m - 1; 20 if($prevM < 1) { 21 $prevM = 12; 22 $prevY--; 23 } 24 // 一ヶ月後。12より大きければ1にして1年上げる。 25 $nextM = $m + 1; 26 if($nextM > 12) { 27 $nextM = 1; 28 $nextY++; 29 } 30 31 32 $next = $m < 12 ? $m + 1 : 1; 33 34//EOMはechoを非表示にする 35 print <<< EOM 36 {$y}{$m}月のカレンダー 37 <a href="?y={$prevY}&m={$prevM}" />&laquo;</a> 38 <a href="?y={$nextY}&m={$nextM}" />&raquo;</a> 39EOM; 40?> 41 <tr> 42 <th></th> 43 <th></th> 44 <th></th> 45 <th></th> 46 <th></th> 47 <th></th> 48 <th></th> 49 </tr> 50 <tr> 51<?php 52 53 // その数だけ空白を表示 54 for ($i = 1; $i <= $wd1; $i++) { 55 echo "<td> </td>"; 56 } 57 58 $d = 1; 59 while (checkdate($m, $d, $y)) { 60 echo "<td>$d</td>"; 61 62 // 今日が土曜日の場合は… 63 if (date("w", mktime(0, 0, 0, $m, $d, $y)) == 6) { 64 // 週を終了 65 echo "</tr>"; 66 67 // 次の週がある場合は新たな行を準備 68 if (checkdate($m, $d + 1, $y)) { 69 echo "<tr>"; 70 } 71 } 72 73 $d++; 74 } 75 76 // 最後の週の土曜日まで移動 77 $wdx = date("w", mktime(0, 0, 0, $m + 1, 0, $y)); 78 for ($i = 1; $i < 7 - $wdx; $i++) { 79 echo "<td> </td>"; 80 } 81?> 82 </tr> 83 </table> 84</center> 85</body> 86</html>

①上のほうにある

// 年月を取得する。グローバル変数。
$y = $_REQUEST['y'] ?? date("Y");
$m = $_REQUEST['m'] ?? date("m");

グローバル変数REQUESTまでは理解できるのですがそのあとの ?? date("Y")が読み解けません。お恥ずかしい話ですがこのような書き方を初めてみました。

②上のほうにある

$next = $m < 12 ? $m + 1 : 1;

やはりこの書き方を知りませんでした。

以上2点になります。

解説は大変だと思いますので参考サイトなどでもいただければありがたいです」。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2018/09/19 02:53

ご自身で書かれたのに「解読できない」というところに矛盾を感じます。どこからどうやって引っ張ってきたコードなのでしょうか。(自分が書いたコードの解説をさせるのはちょっとどうかと思いますので、それなりの理由を書く必要があると思います)
m.ts10806

2018/09/19 02:55

ひとまずキーワードのみで回答しますのであとは調べて理解してみてください。
guest

回答5

0

??は、PHP 7で加わったnull合体演算子です。??の前が未定義やNULLでなければ前半を、未定義やNULLなら??の後を返します(リファレンス)。

?:は2つで1セットとなる三項演算子で、条件 ? TRUEのときの値 : FALSEのときの値、というように使います(リファレンス)。

投稿2018/09/19 02:54

maisumakun

総合スコア145183

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

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

0

「三項演算子」で調べてみてください。

投稿2018/09/19 02:56

m.ts10806

総合スコア80850

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

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

0

ベストアンサー

①は「null合体演算子」というものです。
A ?? Bを例に取ると、AがnullもしくはundefinedのときにBを使うというものです。
AがnullでもundefinedでもなければAが使われます。

②は「三項演算子」です。
条件A ? B : Cを例に取ると、条件Aが真のときBを使い、条件Aが偽のときはCを使うというものです。

投稿2018/09/19 02:55

dice142

総合スコア5158

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

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

0

三項演算子とNull合体演算子です。
解説はこちらをどうぞ。

PHP マニュアル

投稿2018/09/19 03:00

Yousuck

総合スコア349

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

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

0

???:ともに三項演算子の式となります。
??についてはPHP7から使えるようになりました。

詳しくは下記URLを参照してください。
https://qiita.com/hnw/items/dff62cd02c780b613d03

投稿2018/09/19 02:54

編集2018/09/19 02:55
hasue

総合スコア155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問