PHP(基礎)
ポートについてと、PHPの配列とについての復習をします。
「xampp」-「htdocs」直下に「php1117」フォルダーを作る
ポート
XAMPPのApacheをスタートさせる。
localhostをブラウザでみると自動的にlocalhost/dashboard/がみえる。
デフォルトでApacheは80番ポートを見にいっています。
po
試しにportを変更してみます。いったんApacheをStopする。
XAMPPのApache「config」の「Apache(httpd.conf)」の
Listen 80という箇所でポートが指定されている。
Listen 80 →Listen8080 に変更してみる。
XAMPPをスタートすると、8080が表示された。 余談)443はhttps
localhostをブラウザで見てみると、80番ポートで待ち受けしているため
エラーになった。
みるためには「:8080」で指定する必要がある。
「localhost:8080」とブラウザに入力する。
ダッシューボードが見えるようになった。
それぞれ待ち受けているポートが決まっている。
apache 80
NginX 80
IIS 80
先にどれかが80番ポートを使っていたら、使えない。
PHP
「php1117」フォルダーに「index.php」を作る。
以下のコードを入力する。
<?php
$year = 2020;
echo '今年は、 $year 年です';
?>
「localhost/php1117/」をブラウザで確認する。
(index.phpはデフォルトで見に行くので入力不要)
↑ 変数が認識されていないようです。
(理由はシングルクォテーションで囲っているから。)
<?php
$year = 2020;
echo "今年は、 $year 年です";
?>
'(シングルクォーテーション)を"(ダブルクォーテーション)にすると2020が出た。ダブルクォテーションは変数展開をする。
<?php
$year = 2020;
echo "今年は、$year年です";
?>
次は変数の前後の半角スペースを抜く。
エラーになった。変数がどこまでか判断できないらしい。
変数を{}で囲うと判断できるようになる。
<?php
$year = 2020;
echo "今年は、{$year}年です";
?>
余談)↓のように文字列連結で書く人もいる。.(ドットでつなぐ)
<?php
$year = 2020;
echo '今年は、'.'$year'.'年です';
?>
数字と文字列を「+」繋いでみる。
<?php
$a = 1;
$b = "hello";
$c = $a + $b;
echo $c;
?>
Warningの警告がでているが、「1」という結果がでている。
【PHPのエラーについて】
「notice」注意「warning」警告の二つのエラーはプログラムには影響しない。しかしお客様のところでは、非表示にするかエラーの元をつぶしておく必要がある。「warning」はバージョンが違うPHPを使っている時など、「notice」は変数の初期化を忘れている場合におきるエラーです。「Fatal」は致命的なエラーでプログラムにも影響するの絶対ダメ。
文字+文字を「+」で足す。
<?php
$b = "hello";
$e = "world";
echo $b + $e;
?>
「+」(足す)を「.(ドット)」に変えると、
<?php
$b = "hello";
$e = "world";
echo $b.$e;
?>
でた!文字の連結はドットで連結する!
・echo と print の違い
echoは表示するだけ、printはリターンする。
実行速度はechoの方が早い。
・関数とメソッドの違い
◆ビルトイン関数:初めから入っている関数のこと。メソッドといわれる。
◆ユーザー定義関数:自分でつくれる(クラスなど)。
※ クラス メンバーメソッドといわれる。これが正式なメソッド。
・クラスとは
$a = new ○○.php (newのことらしい) ???
ここは、ユーザー定義関数を理解してからでないとわからない。
ユーザ定義関数とは、名前を付けて呼び出して仕事をさせる。
・スコープとは
変数の有効範囲のこと
例)三角形の面積を求める(底辺 * 高さ / 2)
この式(ユーザー定義関数)を先につくる。
function triangleArea(){
$i = 底辺 * 高さ / 2;
return $i;
}
この計算した結果がほしい。答えを返すのでreturnをつける。
□ function の後の名前の付け方。
底辺と高さは外からもらう数字。(引数という)
➡まず変数にする。(底辺を$teihen 高さを$takasaに)
➡triangleAreaの第一引数と第二引数に変数を入れる。
function triangleArea( $teihen , $takasa ){
$i = $teihen * $takasa / 2;
return $i;
}
これだけでは計算したものは表示されない。
呼び出すときはechoで表示させる。
echo triangleArea(200,100);
しかしこの書き方はよくない。
一度変数に入れてから出力するのが定例となっている。
$ta = triangleArea(200,100);
echo $ta;
実行してみよう。
<?php
$ta = triangleArea(200,100);
echo $ta;
function triangleArea( $teihen , $takasa ){
$i = $teihen * $takasa / 2;
return $i;
}
?>
計算した結果がでました。しかし、triangleArea()の中に直接数値は入れないのが通例となっている。面倒ですが⬇️のように書くのが良い。
<?php
$teihen = 500;
$takasa = 100;
$ta = triangleArea($teihen,$takasa);
echo $ta;
function triangleArea( $teihen , $takasa ){
$i = $teihen * $takasa / 2;
return $i;
}
?>
function(){}で囲まれている部分はローカルといわれており、そこはそこだけのルールで運用されている。その他はグローバルと呼ばれ、そこで変数を設定していても、ローカル内でその変数は使えない。
グローバルのtriangleArea($teihen,$takasa);の変数と
ローカルのtriangleArea($a,$b)は、第一引数と第二引数というだけの違いなのでアンマッチでもOK!
<?php
$teihen = 500;
$takasa = 100;
$ta = triangleArea($teihen,$takasa);
echo $ta;
function triangleArea($a,$b){
$i = $a * $b / 2;
return $i;
}
?>
練習:
<?php
$a = 1;
function tasuichi(){
print($a+1);
}
tasuichi();
?>
Noticeエラーはでているが、1が表示されている。
ローカルはグローバル変数を参照しない。
functionのスコープ内に$a=1は入らない。
<?php
$x = 1;
function tasuichi($a){
print($a+1);
}
tasuichi($x);
?>
function()の中に$aを渡す。
tasuichi()の中に$xを入れる。
ローカルとグローバルは別なので別の引数でも大丈夫。
もう一つの答えがある
functionスコープ内に、global $a;(グローバル変数を有効にする)を入れることでfunctionのスコープ内で、変数を使えるようにする。
これでもできるが、しない方が良い。
<?php
$a = 1;
function tasuichi(){
global $a;
print($a+1);
}
tasuichi();
?>
問題:これの出力結果はどうなるでしょうか?
<?php
function incriment($a,$b,$c){
echo $a."\n";
echo $b."\n";
echo $c."\n";
}
$a = 0;
incriment($a,$a++,++$a);
?>
$a = 0
$a++(後置き)0に1ずつ加算。1ぽいけど、0を渡してから加算している。
++$a(前置き)第二引数から渡された1に1を加算してから渡している。
<?php
function incriment($a,$b,$c){
echo $a."\n";
echo $b."\n";
echo $c."\n";
}
$a = 0;
incriment($a,++$a,++$a);
?>
<?php
function incriment($a,$b,$c){
echo $a."\n";
echo $b."\n";
echo $c."\n";
}
$a = 0;
incriment($a,++$a,$a++);
?>
<?php
function incriment($a,$b,$c){
echo $c."\n";
echo $b."\n";
echo $a."\n";
}
$a = 0;
incriment($a,$a++,++$a);
?>
余談)下の二つの結果は同じになる。周る前と周る後でというだけ
for($i = 0;$i < 10;$i++){
echo $i;
}
for($i = 0;$i < 10;++$i){
echo $i;
}
・date関数の使い方
<?php
date_default_timezone_set("Asia/Tokyo");
echo date("w",strtotime("2020-11-17"));
echo date("Y-m-d H:i:s");
?>
"w"は
日曜日0
月曜日1
火曜日2
水曜日3
木曜日4
金曜日5
土曜日6
本当はiniの設定で変えないといけない。
echo date("Y-m-d","")
UNIX time stamp(ユニックスタイムスタンプ)1995/1/17から経過時間
strtotime("2020-11-17")の()の中に入れるとユニックスタイムスタンプになる。
<?php
date_default_timezone_set("Asia/Tokyo");
echo date("w",strtotime("1995-1-17"));
echo "<br>";
echo date("Y-m-d H:i:s");
?>
<?php
date_default_timezone_set("Asia/Tokyo");
echo date("w",strtotime("1995-1-17"));
echo "<br>";
echo date("Y-m-d H:i:s");
echo "<br>";
$weekDay = youbi();
echo $weekDay."曜日";
function youbi(){
$weekary=["日","月","火","水","木","金","土"];
$w = date("w",strtotime("1995-1-17"));
return $weekary[$w];
}
?>
<?php
date_default_timezone_set("Asia/Tokyo");
echo date("w",strtotime("1995-1-17"));
echo "<br>";
echo date("Y-m-d H:i:s");
echo "<br>";
$siteibi = "2011-11-18";
$weekDay = youbi($siteibi);
echo $weekDay."曜日";
function youbi($a){
$weekary=["日","月","火","水","木","金","土"];
$w = date("w",strtotime($a));
return $weekary[$w];
}
?>
2011-11-18は金曜日だとわかる
ユーザー定義関数(クラス)の中で出力するのはNG。
必ず外に出して変数にして出力するのがルール。
returnで返すのは一つなので、複数入れたいときは配列を入れる。
本日はここまで
なにとぞ なにとぞー