Skip to content

Instantly share code, notes, and snippets.

@katai5plate
Last active July 12, 2020 13:40
Show Gist options
  • Save katai5plate/51905f92225282db047f725bc5b4c051 to your computer and use it in GitHub Desktop.
Save katai5plate/51905f92225282db047f725bc5b4c051 to your computer and use it in GitHub Desktop.
PHP 自分用チートシート

まだ

  • クラス
  • 名前空間
  • エラー
  • 例外
  • ジェネレータ
  • 組み込みグローバル変数, 定数, 関数など

基本構文

タグ

  • 終了タグには自動で ; が末尾に付与される。
    • JS と比べて ; は重要。
  • HTML 構文を使用しない場合は ?> を省略していい。
<?php echo 1 + 2 + 3 ?>
<?= 1 + 2 + 3 ?>
<?php if ($value == true): ?>
  <p> value is TRUE </p>
<?php else: ?>
  <p> value is FALSE </p>
<?php endif; ?>
<?php
  echo 1 + 2 + 3;

コメント

// aaaa
/* aaaa */
# aaaa

デバッグ

echo "aaaa";

$a = [1 => 2, 3.4 => 5.6, "7" => 890];
// 指定した変数に関する情報を出力
print_r($a);
// 変数の文字列表現を出力
var_export($a);
// 変数に関する情報をダンプ
var_dump($a);

  • 型キャストは (型名) $value のようにする。
    • int, bool, float, string, array, object, unset, binary が使える。
    • b"aaa"(binary) "aaa" と同じ
    • 比較表
category type example note
スカラー bool TRUE, FALSE 大小文字区別がないので tRuE でも通る
スカラー int 1, 01, 0x1, 0b1, 1_0 左から 10 進, 8 進, 16 進, 2 進, カンマ代わり
スカラー float(double) 1.2, 1.2e3, 1E-2, 1_2.3_4 1._2 はできない
スカラー string "a", 'a' ' で囲むと特殊文字が使えない
変数を埋め込むには "$a" のように直接書けばいい
"${a}" のように明示的に書くこともできる
基本的には \ を前置すればエスケープされる。\r\n\t 勿論可能。
正規表現は JS と違って専用の型は無いので、' で囲んで特殊文字を使用する。'/php/i'
複合 array [1, 2], ["x" => 1], array( "x" => 1) キー名はスカラー型のどの値でも使える。1.5 =>
[2 => "z", "x", "y"] のように一部の要素にだけキー指定できる
取得時、キー名が文字列の場合は $arr["key"] のようにする。
複合 object(class) (object) ["x" => 1],
class c{}; $c = new c;
取得時、$obj->param のように取得する
複合(疑似) callback(callable) function($a){return $a;}, fn($a) => $a; コールバック関数には無名関数もパラメータとして渡せる
複合 iterable ? foreachで繰り返し可能な関数?
特殊 resource ? 外部リソースの参照用?
特殊 NULL NULL, null bool と同じく大小文字区別なし
疑似 mixed ? 引数に様々な型を使えるという事
疑似 number ? int または float の事
疑似 array|? object array または object の事
疑似 void ? 返り値がない事

演算子

  • 配列には次の演算子を使用可能: +,==,===,<>,!=,!==
code example description
=,+,-,++,--,*,/,%,** - 代入,加算,減算,加算子,減算子,乗算,除算,剰余,累乗
+$a のようにすると number 型に変換する
= & $a = 3; $b = &$b; 参照渡し。new はデフォで参照が渡るため &new はできない
&,` ,^,~,<<,>>` -
&&,and,` ,or,xor,!`
==,===,<>,!=,!== - 等しい,厳密に等しい,異なる,異なる,厳密に異なる
>,<,>=,<= - 大なり,小なり,大なり=,小なり=
<=> $a <=> $b 宇宙船演算子
a が b より大きいなら 1、小さいなら -1、同じなら 0 が返る
? : - 三項演算子
?? $x = $a ?? $b; NULL合体演算子
a が NULL なら b が返る
@ $x = &$a["x"]; エラー制御演算子
例えば $a["x"] が存在しなくてもエラーにならない
` echo dir .; 実行演算子
OS のコマンドを実行して
シェルやバッチの出力結果を取得できる
. "a".(1 + 1)."b" 文字列結合
.= のようにすると文字列の加算代入が可能
<<<
<<<ID
H\tello!
ID;
<<<'ID'
H\tello!
ID;
ヒアドキュメント。JS で言うテンプレートリテラル
末尾につけるID名は EOD, EOM, EOF を使うのが一般的
前者は " 後者は ' で書かれた文字列として評価されるので、
それぞれ H ello!, H\tello! になる
{} "{$val}"
"{$func()}"
文字列内で変数・関数を指定する。
JS と異なり、"${1 + 1}" はできない。
${} "${val}" 文字列内で変数を明示的に指定する。関数は使用できない
括弧内には $ が付かないことに注意
new - クラスのインスタンス作成
class class C {} クラスの宣言
interface interface I { const X = 1; } 型定義
implements class C implements I {} クラスの宣言に型を使用
instanceof $a instanceof C 使用されたインスタンス・インターフェイスを調べる
-> $a->b クラスやオブジェクトのプロパティにアクセスする
:: $a::b static, 定数 およびオーバーライドされたクラスのプロパティやメソッドにアクセスする

制御構造

  • if, while, for, foreach, switch では {} を使わなくても書ける構文が用意されている。
    • {: に置き換え、} を専用の構文に差し替える。
      • endif,endwhile,endfor,endforeach,endswitch
      if (1) {
        echo "hoge";
      }
      if (1):
        echo "hoge";
      endif;
    • ワンライナーも可能 例: if (1) echo "hoge"; elseif (2) echo "fuga"; else echo "foo";

条件分岐

if (1) {
  echo "hoge";
} elseif (2) {
  echo "fuga";
} else {
  echo "foo";
}
if (1) echo "hoge"; elseif (2) echo "fuga"; else echo "foo";

switch ($i) {
  case "apple":
  case "bar":
    echo "i am any";
    break;
  case "cake":
    echo "cake is a lie";
    break;
  default:
    echo "aaaaaaaa";
}

ループ文

  • for, while では break, continue が使える
    • break 1; のように引数指定することで処理をスキップするループ構造のレベルの数を指定できる。
    • デフォは 1 (現在のループ終了地点)
// $i = 1;
while ($i <= 10) {
  echo $i++;
}

// $i = 0;
do {
  echo $i;
} while ($i > 0);

for ($i = 1; $i <= 10; $i++) {
  if ($i == 5) break;
  echo $i;
}

// $a = [1, 2, 3, 4];
foreach ($a as &$b) {
  $b = $b * 2;
}
foreach ([1, 2, 3, 4] as &$b) {
  $b = $b * 2;
}
// $a = ["x" => 1, "y" => 2, "z" => 3];
foreach ($a as $k => $v) {
  echo "\$a[$k] => $v\n";
}

declare 文

  • 指定する値は直接指定でなければならない
declare(strict_types=1) {
    // ...
}
/* 上下どちらも同じ */
declare(strict_types=1);
// ...

モジュール入出力

  • JS でいう所の require, module.exports
  • include と同じような使い方で include_once,require,require_once も使用可能
    • include_once: 既に読み込まれている場合は再読み込みを行わない
    • require: 失敗すると処理が中断される
    • require_once: include_once + require
// color.php
<?php $color = 'green'; ?>
// fruit.php
<?php return 'apple'; ?>
// test.php
<?php
include 'color.php';
$fruit = include 'fruit.php';
echo "A $color $fruit"; // A green apple
?>

関数

function takes_array($input) {
  echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
// 参照渡し
function add_some_extra(&$string) {
  $string .= 'and something extra.';
}
// デフォルト
function makecoffee($type = "cappuccino") {
  return "Making a cup of $type.\n";
}
// 型指定
function sum(int $a, int $b) {
  return $a + $b;
}
class C {}; function f(C $c = null) {
  var_dump($c);
}
// 無限の引数
function total_intervals($unit, DateInterval ...$intervals) {
  $time = 0;
  foreach ($intervals as $interval) {
    $time += $interval->$unit;
  }
  return $time;
}
// 返り値の型指定
function sum($a, $b): float {
  return $a + $b;
}
// Nullableな返り値
function get_item(): ?string {
  if (isset($_GET['item'])) {
    return $_GET['item'];
  } else {
    return null;
  }
}
// 無名関数
$greet = function($name) {
    printf("Hello %s\r\n", $name);
};
// 静的無名関数
class Foo {
  function __construct() {
    $func = static function() {
      var_dump($this);
    };
    $func();
  }
};
// アロー関数
$y = 1;
$fn1 = fn($x) => $x + $y;
$fn2 = function ($x) use ($y) {
  return $x + $y;
};
fn(array $x) => $x;
static fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

対話型シェル

簡易的な WEB サーバーの構築

echo "<?php phpinfo();" > /d/test/index.php
php -S localhost:810 -t /d/test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment