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}" />«</a> 38 <a href="?y={$nextY}&m={$nextM}" />»</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点になります。
解説は大変だと思いますので参考サイトなどでもいただければありがたいです」。
よろしくお願いいたします。
回答5件
あなたの回答
tips
プレビュー