PHP俺チートシート

PHPをコーディングする上で「これどうやんだっけ」みたいのをいちいちドキュメント確認とかしてたので,個人的な記事にまとめとこうと思う.

なんかあれば追記していく

参考ページ

公式ドキュメント

クラス定義

重要だけど,言語ごとに違うのでまずクラスから

インターフェース (interface)

1
2
3
4
5
interface MyInterfaceClass
{
    public function run();
 
}

インターフェイス内で宣言される全てのメソッドはpublicである必要がある.
インターフェイスを実装するには、implements 演算子を使用する.
クラスは複数のインターフェイスを実装する場合,各インターフェイスをカンマで区切って指定する.

抽象クラス(abstract)

1
2
3
abstract class MyAbstractClass
{
}

インスタンス化できない.
抽象クラスを継承したクラスは,親クラスの全メソッドを定義(オーバーライド)しなければならない.
メソッドは同等(あるいはより緩い制約)の可視性(緩い順に,public,protected,private)で定義する.

トレイト

1
2
3
4
5
6
7
8
9
10
11
trait MyTrait
{
    public function traitMethod()
    {
        echo "trait";
    }
}
 
class MyClass{
   use MyTrait //これでMyTraitのメソッドをMyClassのメソッドとして使えるようになる
}

class定義の中でuseでトレイトを追加する
基底クラスから継承したメンバーよりも、トレイトで追加したメンバーのほうが優先
Laravelを使ってから知った.

クラス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class MyClass extends MyParentClass implements MyInterfaceClass
{
    use MyTrait;
 
    /** */
    public const PUBLIC_CONSTANT = 'constant';
    private const PRIVATE_CONSTANT = 'constant';
    protected const PROTECTED_CONSTANT = 'constant';
    /** どこからでもアクセス可能 */
    public $public_value  = "public value";
    /** 定義したクラスからのみ */
    private $private_value = "private value";
    /** そのクラス自身、そのクラスを継承したクラス、および親クラスからのみアクセス */
    protected $protected_value = "protected value";
    /** */
    public static $static_puclic_value = "static puclic value";
    /** */
    private static $static_private_value = "static private value";
    /** */
    protected static $static_protected_value = "static protected value";
 
    /**
     * コンストラクタ
     */
    public function __costruct($public_value, $protected_value)
    {
        parent::__construct($public_value, $protected_value);//親クラスのコンストラクタを実行する
        $this->public_value = $public_value;
        $this->protected_value = $protected_value;
    }
 
    /**
     *
     */
    public function getPrivateValue()
    {
        $this->privateFunction();
        $this->protectedFunction();
        return $this->private_value;
    }
 
    /**
     * 定義したクラスからのみ
     */
    private function privateFunction()
    {
        return "private function";
    }
 
    /**
     *
     */
    protected function protectedFunction()
    {
        return "protected function";
    }
 
    /**
     *
     */
    public static function create()
    {
        return new static();
    }
 
    /**
     *
     */
    private static function privateStatic()
    {
    }
 
    /**
     *
     */
    protected static function protectedStatic()
    {
    }
 
    public function __destruct()
    {
    }
}

ファイナルクラス(?)(継承できないクラス)

1
2
3
4
5
6
7
8
9
final class MyFinalClass
{
 
    //メソッドにfinalでオーバーライド不可にする
    //プロパティはfinalできないみたい
    final public function finalFunction()
    {
    }
}

クラスをインスタンス化して使う

1
2
3
4
5
6
//ここまでのコードを実装している前提で
$my_class = new MyClass("hoge", "huga");
$my_class->traitMethod(); //トレイトのメソッドを実行してみる
$my_class->getPrivateValue(); //publicメソッドを介してprivateプロパティを取得
MyClass::create()->getPrivateValue(); //staticメソッドの実行(内部でインスタンス化してインスタンスを返すようなのもよく見る)
(new MyClass("hoge", "huga"))->getPrivateValue();//これもできるらしい.使う場面あるか?

new でインスタンス化する
->(アロー演算子)でプロパティやメソッドにアクセスする.(PHPでは,ドットは文字列の結合だよ)
::でstaticプロパティ/メソッドにアクセスする.

制御構造

PHP独特で忘れがちなものだけ書くよ!

for文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$musics = [
    "Signalize!",
    "ダイヤモンドハッピー",
    "KIRA☆Power",
    "SHINING LINE*",
    "Du-Du-Wa DO IT!!",
    "Lovely Party Collection",
    "START DASH SENSATION",
];
 
for ($i = 0; $i < count($musics); $i++) {
    echo $musics[$i]."\n";
}
/*
Signalize!
ダイヤモンドハッピー
KIRA☆Power
SHINING LINE*
Du-Du-Wa DO IT!!
Lovely Party Collection
START DASH SENSATION
*/

普通のfor文

foreach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$units = [
    "ソレイユ" => [
        "星宮いちご",
        "霧矢あおい",
        "紫吹蘭",
    ],
    "トライスター" => [
        "神崎美月",
        "一ノ瀬かえで",
        "藤堂ユリカ"
    ],
    "ぽわぽわプリリン" => [
        "有栖川おとめ",
        "北大路さくら",
        "神谷しおん"
    ],
    "ルミナス" => [
        "大空あかり",
        "氷上スミレ",
        "新庄ひなき"
    ]
];
 
foreach ($units as $unit_name =>$idols) {
    echo $unit_name."\n";
    echo "|";
    foreach ($idols as $idol) {
        echo $idol."|";
    }
    echo "\n";
}
 
/*
ソレイユ
|星宮いちご|霧矢あおい|紫吹蘭|
トライスター
|神崎美月|一ノ瀬かえで|藤堂ユリカ|
ぽわぽわプリリン
|有栖川おとめ|北大路さくら|神谷しおん|
ルミナス
|大空あかり|氷上スミレ|新庄ひなき|
*/

配列とオブジェクトで使える.
v7.1からIterable(イテレータブル)なクラスで利用できるらしい.

配列操作

rangeメソッド:範囲を指定して配列を生成

1
range(0, 100, 10);

explode:区切り文字で配列に分割する

1
explode('/', 'ヒラリ/ヒトリ/キラリ');

preg_split:正規表現で分割

1
preg_split('[/]', 'ヒラリ/ヒトリ/キラリ');

implode:配列要素を文字列により連結する(exploadの逆?)

1
implode('/', ["ヒラリ", "ヒトリ", "キラリ"]);

implodeは引数が逆でもいいらしい
ただ「explodeと同じ順番の方が分かりやすいよね(暗黒微笑)」とのこと(??)

str_split:

1
str_split("123456789", 3);

sort:配列の中身をソートする

1
2
3
$random_number = [9, 1, 0, 2, 8, 3, 7, 4, 6, 5];
$sorted = $random_number;
sort($sorted);

PHPのソート関数はアドレス渡し(いわゆる破壊的?)みたい
sort関数の戻り値はbool値(ソートに成功したか否か)なのでややこしく感じる
配列を別の変数に入れて実行すればいい
(もしくはラッパー関数を定義する)
(もしくは”使用できる環境なら”Collection系のオープンソースライブラリを使う)
sort関係は闇が深そうなので,適宜ドキュメントを読んだほうが良さそう.

Math・数学関数

頑張って自分で実装とかはしたくないところ.

絶対値

1
2
abs(5); //5
abs(-6); //6

平方根

1
2
sqrt(9);//float(3)
sqrt(10);//float(3.1622776601684)

文字列操作

str_replace:文字列を置き換える

1
str_replace(["\r\n","\r","\n"], '', "改行\r\n改行\r改行\n")

これからも,なにかあれば追加していくよ!

Spread the love
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Python
Pythonオレオレオレオレチートシート

目次1 参考ページ2 環境の作り方2.1 インストール2.1.1 windowsの場合2.1.2 M …

Spread the love
Laravel
やる,Laravelを.その3 Laravel Mix

お疲れさまですRainGearの杏です.   Laravelでの3Dモデルデータ閲覧システ …

Spread the love
Laravel
やる、Laravel5.7を。その2「インストールして認証とかを試す」

お疲れ様です. RainGearの杏です.   目次0.1 はじめに0.2 環境0.3 イ …

Spread the love