2021年4月6日火曜日

php

 paiza php学習まとめ

変数

  • 変数は$
  • .でつなげることが可能
    • echo $a.$b とかできる
    • echo $a."abc".$b みたいにして間に指定したリテラルを挟むことも可能

条件分岐、ループ構文

  • 基本Cと同じ

配列

  • $配列名 = array(要素1,要素2,要素3...);
  • 要素数の上限がバージョンで異なる
    • PHP4系は65535個
    • PHP5系は429467296個
  • 特定の要素の取り出し $配列名[要素番号]
    • 例:$team[1];
  • 要素の追加 $配列名[] = 追加内容
    • 例:$team[] = "ドラゴン";
    • いきなりこれをやっても配列は作られる
  • 要素のアップデートは追加の構文で要素番号を指定する
  • 要素の削除 unset($team[2])
    • unsetした要素番号だけ歯抜けになるので注意

連想配列

  • 0,1...ではなく文字列をキーとしたもの
  • Valueは文字列でも数字でも良い
  • 宣言:$item = array("ロングソード" => 2, "鉄の盾" => 1);
    • array関数を使わずに作る方法
    • $item = ["勇者","戦士","魔法使い"];
  • 要素の追加:$item["クリスタル"] = 3;
  • 要素の削除:unset($item["クリスタル"]);

配列のソート

  • sort関数を利用
    • sort($item);
    • 一文字目を取得して順番を並び替える
    • 一文字目が同じだった場合は二文字目で並び替える
    • 日本語ソート、ひらがな→カタカナ→漢字→全角数字の順で整列
    • 漢字の場合は文字コード順なので注意
  • 逆順は rsort関数を利用
    • rsort($item);

連想配列のソート

  • 連想配列にsortをかけると、通常の配列に変換されてしまう(使っちゃダメ)
  • asort:valueを小さい順に並べ替える
  • arsort:valueを大きい順に並べ替える
  • ksort:keyを小さい順に並び変える
  • krsoft:keyを大きい順に並び変える

二次元配列

  • 配列の中に配列を入れられる
    • $itemB = [$teamA[0],$teamA[1],$teamA[2]];
    • $itemB = [$teamA,$teamB,$teamC]; ABC=配列
  • print_rでもそのまま表示できる
  • 呼び出し:$teamB[0][1];
  • 直接の定義
$teams =
[
["勇者", "戦士", "魔法使い"],
["盗賊", "忍者", "商人"],
["スライム", "ドラゴン", "魔王"],
];
  • 配列の追加
    • 親要素に追加 $teams[] = ["A","B","C"];
    • 子要素の追加 $teams[0][] = "D";
  • 配列の削除
    • 親要素ごと削除 unset($teams[0]);
    • 子要素の削除 unset($teams[0][1]);
  • 二次元配列のforループ
for ($i = 0; $i < count($teams); $i++) {
for($j = 0; $j < count($teams[$i]); $j++) {
  • 二次元配列のforeachループ
foreach ($teams as $row) {
foreach ($row as $col) {
  • 二次元配列をarray関数で作成する
$teams = array(
array("勇者", "戦士", "魔法使い"),
array("盗賊", "忍者", "商人"),
array("スライム", "ドラゴン", "魔王"),
);

foreach文

  • foreach($ary as $value){}; $value = バリューを代入する変数
  • キーも同時に取り出す場合
    • foreach($ary as $key => $val){}; $key=キーを代入する変数、$val=valueを代入する変数

array_fill関数

  • 配列を指定した値で埋める
  • array_fill(0,20,"森"); index=0から20個分作る
  • array_fill(0,10,array_fill(0,20,"森")); 入れ子にもできる

rand関数

  • rand(1-5);とかすると指定した範囲内で乱数を作れる
  • 詳細はこちら(https://www.php.net/manual/ja/function.rand.php)

date関数

  • 指定された引数 timestamp を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返す
  • timestampが与えられない場合は現在時刻を返す
  • 詳細はこちら(https://www.php.net/manual/ja/function.date.php)

fgets関数

  • fgets(STDIN) paizaではこう
  • ファイルポインタから一行取得する
  • もう一度実行すると次の行に移動する
  • 詳細はこちら(https://www.php.net/manual/ja/function.fgets.php)

trim関数

  • 文字列の先頭および末尾にあるホワイトスペースを取り除く
  • 改行コードも取り除くことができる
  • 詳細はこちら(https://www.php.net/manual/ja/function.trim.php)

print_r関数

  • 指定した配列、変数に関する情報をわかりやすく出力する
  • 詳細はこちら(https://www.php.net/manual/ja/function.print-r.php)

var_dump関数

  • 配列の型を確認できる

explode関数

  • カンマでCSVを区切って分割などができる(指定した文字で分割する)
  • 分割して配列に入れられる
    • 例:$array = explode(",",$input);

count関数

  • 配列のすべての要素の数を調べる
  • count($array);
  • 二次元配列でも利用可能
    • count($array); count($array[0]);

インクリメント・デクリメント

  • ++やーーが使用可能

比較演算子

  • == > < >= <= !=
  • 型まで比較して同一なのか厳密な確認をする場合は === が使用できる

標準入力に値が入っている限り処理を継続

while($input = fgets(STDIN)){
    $array[] = trim($input);
}

※trimすると改行コードも消えるので、空白行への対応ができなくなる(trimを格納寸前で行えば標準入力読み込み時に空白行でストップするのを防げる

function文

  • function say_hello()
  • function say_hello($x,$y)
  • 引数省略の場合のデフォルト値は関数定義の際に変数=で直接書いておける
    • function say_hello($x = "こんにちわ")
  • 戻り値はreturnで返す
  • PHPでは小文字を使うことが多い
  • 動詞+名詞がスタンダード
  • 関数定義の前でも後でも変わらず動作する

クラス

  • オブジェクト=変数とメソッドがセットになったもの
  • オブジェクトの中にある関数はメソッドに変わる
  • クラス内の変数=メンバー変数と呼ぶ
  • phpではオブジェクトとインスタンスは同義
  • 変数とメソッドがセット→バグが出にくい
  • クラスとオブジェクトに分離→再利用しやすい
  • クラス名の最初の文字は大文字にする
  • クラスの実体化とメソッドの呼び出し
    • newで実体化して、ー>でメソッドを呼び出す
    • 内部の変数にアクセスする際は->$の$は不要なので注意
// クラスを作成する
class Player {
public function walk() {
$message = "勇者は荒野を歩いていた。";
echo $message;
}
}

$player1 = new Player();
$player1->walk();

  • コンストラクタ
    • public function __construct($name)で使用
class Player {
private $myName;
public function __construct($name){
$this->myName = $name;
}
public function walk() {
echo $this->myName . "は荒野を歩いていた。" . "\n";
}
}
$player1 = new Player("戦士");
$player1->walk();

$player2 = new Player("魔法使い");
$player2->walk();

$player1->walk();
  • インスタンスを配列に格納することもできる
$enemies[] = new Enemy("スライム");
$enemies[] = new Enemy("モンスター");
$enemies[] = new Enemy("ドラゴン");
foreach ($enemies as $enemy) {
$enemy->attack();
}
  • 引数と戻り値のあるメソッドを作る
    • returnで値を返すfunctionをメソッドとして持たせれば良いだけ
class Item {
public $price;
public $quantity;

public function __construct($newPrice, $newQuantity){
$this->price = $newPrice;
$this->quantity = $newQuantity;
}

public function getTotalPrice() {
return $this->price * $this->quantity;
}
}

$apple = new Item(120, 15);
$total = $apple->getTotalPrice();
echo "合計金額は" . $total . "円です。\n";
$orange = new Item(85, 32);
echo "合計金額は" . $orange->getTotalPrice() . "円です。\n";
  • アクセス修飾子
    • public:外からでも呼び出し可能
    • private:同じクラスの中から呼び出し可能
  • static修飾子
    • メモリ上に展開されたままになる
    • 全てのインスタンスで共通して利用ができる(オブジェクトを作成する必要はない)
    • $thisは自分のインスタンスを表す指定なので、staticの呼び出し時は使わない
    • 代わりにself::$taxのようにselfを使用する selfは自分のクラスという意味
    • インスタンスを指定するのか、クラスを指定するのかで異なるので注意
    • static宣言されたクラス内のメソッドを呼び出すには Item::getTotalAmoutみたいにする(selfの代わりにクラス名が指定されるだけ)

クラスの継承

  • クラスの継承時はクラス宣言時に「extends 親クラス」をつける
  • 継承元を親クラス、スーパークラスと呼ぶ
  • 継承した子どもは子クラス、サブクラスと呼ぶ
  • 子クラスで定義されていないクラスが呼び出された時、親クラスの方を見に行くようになっている
  • コンストラクタも親のものを継承するので、子クラス側では宣言なしでも良い
<?php
// クラスを継承する
class Box {
public $myItem;

public function __construct() {
$this->myItem = "新しいアイテム";
}

public function open() {
echo "宝箱を開いた。".$this->myItem."を手に入れた。\n";
}
}

class JewelryBox extends Box {
public function look() {
echo "宝箱はキラキラと輝いている。\n";
}
}
$box = new Box();
$box->open();
echo "\n";
$jewelryBox = new JewelryBox();
$jewelryBox->look();
$jewelryBox->open();
?>
  • メソッドのオーバーライド
    • 親クラスのメソッドを子クラスで再定義する
    • 単に子クラス側で同じ名前のメソッドを定義するだけ
<?php
// メソッドのオーバーライド
class Box {
public $myItem;

public function __construct($item) {
$this->myItem = $item;
}

public function open() {
echo "宝箱を開いた。".$this->myItem."を手に入れた。\n";
}
}
class MagicBox extends Box {
public function look() {
echo "宝箱は妖しく輝いている。\n";
}
public function open() {
echo "宝箱を開いた。".$this->myItem."が襲ってきた!\n";
}
}

$box = new Box("鋼鉄の剣");
$box->open();

$magicBox = new MagicBox("モノマネモンスター");
$magicBox->look();
$magicBox->open();
?>






0 件のコメント:

コメントを投稿