PHPざっくり基礎04

整数

整数は以下の種類を扱うことができる。

  • 10 進数(基数 10)
  • 16 進数 (基数 16)
  • 8 進数 (基数 8)
  • 2 進数 (基数 2) 

オプションで、符号(-または+)を前に付けることが可能。

<?php
$a = 1234; // 10進整数
$a = -123; // 負の数
$a = 0123; // 8進数 (10進数の83と等価)
$a = 0x1A; // 16進数 (10進数の26と等価)
$a = 0b11111111; // 2進数 (10進数の255と等価)
?>

echoやvar_dumpで表示すると、どれも10進数で表示された。

stringにキャストして表示しても10進数のままで表示された。

整数の範囲(約20億)を超えた場合はfloatとして扱われる。

浮動小数点

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
?>

精度に注意事項があるので、桁数が増えたときはちゃんと確認しよう!

文字列

文字列リテラルは、4 つの異なる方法で指定することが可能。

  • 引用符
  • 二重引用符
  • ヒアドキュメント構文
  • nowdoc 構文 (PHP 5.3.0 以降)

引用符

引用符でくくると文字列として認識される。

<?php
$a = 'PHPの勉強';

echo $a; //PHPの勉強
var_dump($a);
?>

引用符を文字列として表示したい場合はバックスラッシュでエスケープさせる必要がある。

<?php

$a = '\'引用符を出そう'; //'引用符を出そう
echo $a; //PHPの勉強
var_dump($a);
?>

シングルクォーテーションでくくっている場合はエスケープシーケンスは展開されず、そのまま出力される。

<?php

$a = '改行\nテスト'; //'改行\nテスト

echo $a; //PHPの勉強
var_dump($a);
?>


二重引用符

文字列が二重引用符 (“) で括られた場合、以下のエスケープシーケンスを特殊な文字として解釈する。

エスケープシーケンス一覧

  • ¥n 改行
  • ¥r キャリッジリターン
  • ¥t タブ
  • ¥¥ ¥文字
  • ¥$ $文字
  • ¥( 左括弧
  • ¥) 右括弧
  • ¥[ 左括弧
  • ¥] 右括弧
  • ¥’ シングルクオーテーション
  • ¥” ダブルクオーテーション
  • ¥nnn 8 進数表記
  • ¥xnn 16 進数表記
<?php

$a = "改行\nテスト\n";

echo $a; //PHPの勉強
var_dump($a);
?>


この場合\nの位置で改行がされる。

<?php

$b = 1;

echo "{$b}回目のテスト";
?>

$bが展開されて1回目のテストと表示される。

注意するのは変数を{}で囲っていること。

どこまでが変数かわかるようにしないといけないので変数名の後ろに半角スペースや{}で変数を展開できるようになるが、半角スペースの場合そのまま半角スペースも表示されたので、{}で書くほうがわかりやすい気がする。

ヒアドキュメント構文

ある ID (と、それに続けて改行文字) を <<< の後に指定し、文字列を置いた後で、同じ ID を括りを閉じるために置く。

<?php

$b = <<<ABC
30回目のテスト
ABC;

echo $b; //30回目のテスト
?>

<<<ABCからABC;までの間がすべて文字列として認識される。

ダブルクォーテーション構文と同じ扱いになる。

警告

非常に重要なことですが、終端 ID がある行には、セミコロン (;) 以外の他の文字が含まれていてはならないことに注意しましょう。 これは、特に ID はインデントしてはならないということ、 セミコロンの前に空白やタブを付けてはいけないことを意味します。 終端 ID の前の最初の文字は、使用するオペレーティングシステムで定義された 改行である必要があることにも注意を要します。 これは、例えば、Macintoshでは \r となります。 最後の区切り文字の後にもまた、改行を入れる必要があります。
この規則が破られて終端 ID が “clean” でない場合、 終端 ID と認識されず、PHP はさらに終端 ID を探し続けます。 適当な終了 ID がみつからない場合、 スクリプトの最終行でパースエラーが発生します。

とあるので、使う場合は改行やインデントに気を付けよう!

nowdoc構文

基本的にはヒアドキュメントと似ているが、シングルクォーテーションでくくった時と同じ挙動になる。なので、変数とエスケープシーケンスは展開されない。

<?php

$b = <<<'ABC'
30回目のテスト\n
ABC;

echo $b;
?>


「30回目のテスト\n」とそのまま出力される。

演算子

文字列は、’.’ (ドット) 結合演算子で結合することが可能。

<?php

$b = "ここと";
$c = "ここ";
echo $b.$c."を.でつなげる"; //こことここを.でつなげる
?>


文字列はよく使うので基本的な扱い方はしっかり覚えよう!

細かな仕様や詳細はその都度しっかり確認する!

PHPざっくり基礎03

先にIF文をかける用になろう

例文を作るときにif文を使うことが多いので、先にif文を覚えよう。

基本構文

<?php
if ($a > $b)
  echo "aはbより大きい";
?>

条件文に対して満たされていない場合に別の処理をしたい場合はelseを使う。

<?php
if ($a > $b) {
  echo "aはbよりも大きい";
} else {
  echo "aはbよりも小さい";
}
?>

{ }を使うことでグループ化でき、入れ子にしたりelseを使ったりできるので基本は{ }ありで覚える。

論理型 (boolean)

基本構文

論理型は、最も簡単な型で真偽の値を表す。 この値は、TRUE または FALSE のどちらかになる。定数を指定する場合はtrueかfalseを入れる。大文字、小文字はどっちでもいい。

<?php
$foo = True; // 値TRUEを$fooに代入する

$foo2 = False; // 値Falseを$foo2に代入する

通常、boolean 型の値を返す演算子を使用してから、 制御構造にその結果を渡す。

<?php

$test = "テストだよ";

//==はboolean型を返す演算子
if($test == "テストだよ") {
  echo "トゥルー";
} else {
  echo "ファルス";
}
<?php
$show_separators = true;

// これは冗長
if ($show_separators == TRUE) {
    echo "<hr>\n";
}

// 上の例は次のように簡単に書くことができます。
if ($show_separators) {
    echo "<hr>\n";
}

リファレンスではTRUEの場合の処理を簡単に書く方法が記載されていましたが、よくわからなかったので他のサイトを探したところ、「 FALSE 以外は全て TRUE と見なされます 」という解説がありました。

実際にやってみたところ

<?php

$bool_test = 5;//trueになる
$bool_test = "a";//trueになる
$bool_test = false;//falseになる

if ($bool_test) {
    echo "true";
} else {
  echo "false";
}

となり、false以外で真となりました。

FALSE と見なされる値

  • 表示なし
  • キーワード FALSE
  • 整数 0
  • 浮動小数点 0.0
  • 空の文字列 ” “
  • 空の文字列 ‘ ‘
  • 文字列 ‘0’ (文字列としての0)
  • 要素数が 0 の配列 $ary = array();
  • プロパティーやメソッドを含まない空のオブジェクト
  • NULL値

trueかfalseを問う制御文はたくさん出てきそうなので冗長にならないようにスマートに考えれるようになろう!

PHPざっくり基礎02

型について

基本の型

PHPは10 種類の基本型がある。

スカラー型

スカラー型はデータ型の中でも最も基本的なもので、一つの変数に
一つの値だけを扱える型。

  • 論理値 (boolean)
  • 整数 (integer)
  • 浮動小数点数 (float, double も同じ)
  • 文字列 (string)

複合型

複合型は、一つの変数で複数の値を扱うことができる。

  • 配列 (array)
  • オブジェクト (object)
  • callable
  • iterable

特殊型

特殊型はスカラー型、特殊型に分類が不可能な型 。

  • リソース (resource)
  • ヌル (NULL)

基本的に変数の型はPHPが文脈に応じて自動で決めてくれる。(プログラマが決めるものではない。)

式の型や値を知りたいときは「var_dump」を使って確認する。 デバッグのために、単純に人間が読みやすい形で型を表示したい場合には gettype() をつかう。

型のチェック(if等)をするときは「 is_(type名)  」を使う。

型を他の型に変換したい場合、キャストを使う。

<?php
$test_bool = true;
$test_str = "こんにちは";
$test_int = 2;
$test_float = 1.5;

echo gettype($test_bool); //boolean
echo gettype($test_str); //string
echo gettype($test_int);// integer
echo gettype($test_float); //double

表示結果はコメントの通りになった。

数値を文字列に変換したいときは

<?php
$test_int = 2;

$test_cast = (string)$test_int;

echo gettype($test_int);// integer
echo gettype($test_cast); //string

元々数値(integer)だったものを文字列(string)に変換することが出来た。

まずは型の基本をしっかり覚えて、変数が何になっているかわからなくなったら確認しよう!

PHPざっくり基礎01

基本的な構文

PHP タグ

PHPの始まりと終わりにはタグがいる。

<?php


?>

ファイルが PHP コードのみの場合は、ファイルの最後の終了タグは省略するほうがいいみたい。

<?php


終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるらしい。

HTML からの脱出

基本的に、開始タグと終了タグに囲まれていない部分をすべて無視する。

<p>この部分は無視されて、そのままブラウザには表示される。</p>
<?php echo "ここはPHPに渡される"; ?>
<p>この部分は無視されて、そのままブラウザには表示される。</p>

ただし、条件文があるときは終了タグがあっても条件通りの動作をする。

<?php if ($test == true): ?>
  条件式が真の場合表示。
<?php else: ?>
  それ以外の場合にこっちが表示。
<?php endif; ?>

つまり

<?php
  $test = true;
?>
<?php if ($test == true): ?>
  <p>trueだよ</p>
<?php else: ?>
  <p>trueじゃないよ</p>
<?php endif; ?>

この場合、$testにはtrueが入っているので「trueだよ」と表示される。

<?php
  $test = false;
?>
<?php if ($test == true): ?>
  <p>trueだよ</p>
<?php else: ?>
  <p>trueじゃないよ</p>
<?php endif; ?>

この場合、$testにはfalseが入っているので「trueじゃないよ」と表示される。

ほかにも5種類ほどタグはあるが、今は基本形だけ覚えておけばOK

コメント

コメントは3種類

<?php
// これが1行コメント
# これも1行コメント
/* これは複数行コメント
  なのでこんな感じに書けます */

コメントを入れ子にすると初めのコメント終了タグでどちらも閉じてしまうので注意!

<?php
 /*
    echo 'テストです'; /* このコメントが問題を生じます */
 */
?>

気を付けよう!

PHPざっくり基礎00

PHPを学ぼう

これまで何となくでPHPを触っていたので、基礎的な考え方や書き方がわからなかった。作りたいものが出てきたのでこれを機に1から勉強しようと思う。

勉強方法

PHPのマニュアルには基礎講座的なものがあるので、まずはそれを熟読し、基礎を固める。マニュアルが読めないと話にならないもんね。

マニュアルはこちら

マニュアルの「言語リファレンス」から始める。

環境

OS:win10

xampp

エディター:vscode

目標

目的のプログラムを適切な形、方法で書けるようになること。

途中で挫折しないこと。

わからないことはテラテイル等の質問サイトに投げて、わからないまま進めない。

円と円を自由な位置で接するようにしたい

完成図

作り方

円を描く

今回はわかりやすいように「線の位置:線を内側にそろえる」にしています。

大きい円に小さい円をくっつけたいと思います。

線を描く

軸となる円の中心から円周に交差するように直線を引きます。

円の中心から線を引く理由は、 この直線を円の中心を軸にして回転させる為です。

円をくっつけたい場所まで直線を回転させる

回転を描けるときは、

ツールから回転を選んでキーボードのALT押しながら円の中心を選択してください。すると画像のような回転のウィンドウが出ます。円をくっつけたい場所に直線が交差するようにし、「OK」を押します。

今回は「188°」にします。

この度数は必ず覚えておいてください。あとで使います。

交差した場所にアンカーポイントを追加する

小さい円をくっつける場所にアンカーポイントを設定し、接しやすいようにします。

くっつける円のアンカーポイントをつかんで、追加したアンカーポイントまで移動させる

ちょっとやり方が複雑ですが、

  1. 選択ツールに切り替える
  2. 移動させたい円を選択せずに、アンカーポイントの部分をつかむ
  3. 直線が交差している部分までもっていくと選択ツールの色が白色になる(ダイレクト選択ツールのように)
  4. スナップさせる

2番と3番がややこしいですが、実際にやってみてください。

移動させた円を回転させる

直線を回転させた時と同じようにツールから回転を選択する。

この時さっき、スナップさせたアンカーポイントを中心にする。

直線と同じ角度に設定し「OK」を押す。

直線を削除して完成

いらない直線を削除して完成!

こんなのが作れる

蔵書システムを作りたい

蔵書システムってなあに?

自分の持っている本を記述、保存しているリスト的なやつ。

なぜ作りたいか

集めている本を本屋にふらっと寄った時に買えるようにしたい。

たまにダブったりするのを防ぎたい。

ダブるのが怖くて、確認するまで買えない。

いつでもどこでも自分の持っている本が何か、何巻まで持っているのかを知りたい。

どんな仕様がいいか(ざっくりver)

  • 持っている本を登録する
  • 何巻まで出ているかがわかる。
  • 連載中かどうかがわかる。
  • 一覧で見やすくしたい。
  • すぐに買うのか連載が終了してから買うのか、簡単なメモやステータスが欲しい。
  • 連載終了かつ集め終わった本は表示、非表示などで集めている途中の本と表示を切りわけできるようにしたい。