見出し画像

PHP(基礎)

ポートについてと、PHPの配列とについての復習をします。

「xampp」-「htdocs」直下に「php1117」フォルダーを作る

画像17

ポート

XAMPPのApacheをスタートさせる。

画像8

localhostをブラウザでみると自動的にlocalhost/dashboard/がみえる。
デフォルトでApacheは80番ポートを見にいっています。

po

画像8

試しにportを変更してみます。いったんApacheをStopする。

画像9

XAMPPのApache「config」の「Apache(httpd.conf)」の
Listen 80という箇所でポートが指定されている。

画像6

Listen 80 →Listen8080 に変更してみる。

画像7

XAMPPをスタートすると、8080が表示された。 余談)443はhttps

画像4

localhostをブラウザで見てみると、80番ポートで待ち受けしているため
エラーになった。

画像5

みるためには「:8080」で指定する必要がある。
「localhost:8080」とブラウザに入力する。

画像17

ダッシューボードが見えるようになった。
それぞれ待ち受けているポートが決まっている。

画像10

apache 80
NginX 80
IIS 80
先にどれかが80番ポートを使っていたら、使えない。

PHP


「php1117」フォルダーに「index.php」を作る。

画像11

以下のコードを入力する。
<?php
   $year = 2020;
   echo '今年は、 $year 年です';
?>
「localhost/php1117/」をブラウザで確認する。
(index.phpはデフォルトで見に行くので入力不要)

画像12

↑ 変数が認識されていないようです。
(理由はシングルクォテーションで囲っているから。)

<?php
   $year = 2020;
   echo "今年は、 $year 年です";
?>

画像13

'(シングルクォーテーション)を"(ダブルクォーテーション)にすると2020が出た。ダブルクォテーションは変数展開をする。
<?php
   $year = 2020;
   echo "今年は、$year年です";
?>
次は変数の前後の半角スペースを抜く。

画像14

エラーになった。変数がどこまでか判断できないらしい。
変数を{}で囲うと判断できるようになる。
<?php
   $year = 2020;
   echo "今年は、{$year}年です";
?>
余談)↓のように文字列連結で書く人もいる。.(ドットでつなぐ)
<?php
   $year = 2020;
   echo '今年は、'.'$year'.'年です';
?>
数字と文字列を「+」繋いでみる。
<?php
   $a = 1;
   $b = "hello";
   $c = $a + $b;
   echo $c;
?>

画像15

Warningの警告がでているが、「1」という結果がでている。
【PHPのエラーについて】
「notice」注意「warning」警告の二つのエラーはプログラムには影響しない。しかしお客様のところでは、非表示にするかエラーの元をつぶしておく必要がある。「warning」はバージョンが違うPHPを使っている時など、「notice」は変数の初期化を忘れている場合におきるエラーです。「Fatal」は致命的なエラーでプログラムにも影響するの絶対ダメ。
文字+文字を「+」で足す。
<?php
   $b = "hello";
   $e = "world";
   echo $b + $e;
?>

画像16

「+」(足す)を「.(ドット)」に変えると、
<?php
   $b = "hello";
   $e = "world";
   echo $b.$e;
?>

画像17

でた!文字の連結はドットで連結する!

・echo と print の違い

echoは表示するだけ、printはリターンする。
実行速度はechoの方が早い。

・関数とメソッドの違い

◆ビルトイン関数:初めから入っている関数のこと。メソッドといわれる。
◆ユーザー定義関数:自分でつくれる(クラスなど)。
※ クラス メンバーメソッドといわれる。これが正式なメソッド

・クラスとは

$a = new ○○.php (newのことらしい)     ???
ここは、ユーザー定義関数を理解してからでないとわからない。
ユーザ定義関数とは、名前を付けて呼び出して仕事をさせる。

・スコープとは

変数の有効範囲のこと

例)三角形の面積を求める(底辺 * 高さ / 2)
この式(ユーザー定義関数)を先につくる。
function triangleArea(){
    $i = 底辺 * 高さ / 2;
    return $i;
   }
この計算した結果がほしい。答えを返すのでreturnをつける。

□ function の後の名前の付け方。

画像18

底辺高さは外からもらう数字。(引数という)
➡まず変数にする。(底辺を$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;
   }
?>

画像19

計算した結果がでました。しかし、triangleArea()の中に直接数値は入れないのが通例となっている。面倒ですが⬇️のように書くのが良い。
<?php
   $teihen = 500;
   $takasa = 100;
   
   $ta = triangleArea($teihen,$takasa);
   echo $ta;
   
   function triangleArea( $teihen , $takasa ){
       $i = $teihen * $takasa / 2;
       return $i;
      }
?>

画像20


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;
      }
?>

画像21

練習:

画像22

<?php
   $a = 1;
   
   function tasuichi(){
       print($a+1);
   }
   tasuichi();
?>
Noticeエラーはでているが、1が表示されている。

画像23

ローカルはグローバル変数を参照しない。
functionのスコープ内に$a=1は入らない。
<?php
   $x = 1;
   
   function tasuichi($a){
       print($a+1);
   }
   tasuichi($x);
?>
function()の中に$aを渡す。
tasuichi()の中に$xを入れる。
ローカルとグローバルは別なので別の引数でも大丈夫。

画像24

もう一つの答えがある
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);    
?>

画像26

$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);  
?>

画像26

<?php
   
function incriment($a,$b,$c){
   echo $a."\n";
   echo $b."\n";
   echo $c."\n";
}
$a = 0;
incriment($a,++$a,$a++);  
?>

画像27

<?php
   
function incriment($a,$b,$c){
   echo $c."\n";
   echo $b."\n";
   echo $a."\n";
}
$a = 0;
incriment($a,$a++,++$a);  
?>

画像28

余談)下の二つの結果は同じになる。周る前と周る後でというだけ
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");
?>

画像29

"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");
?>

画像30

<?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];
}
?>

画像31

<?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は金曜日だとわかる

画像32

ユーザー定義関数(クラス)の中で出力するのはNG。
必ず外に出して変数にして出力するのがルール。
returnで返すのは一つなので、複数入れたいときは配列を入れる。

本日はここまで

なにとぞ なにとぞー