レンタルサーバー引っ越し

このサイトの運営にあたって、レンタルサーバーを今まではfc2のライトプランを使ってやっていたわけだが、今回いろいろな理由でさくらレンタルサーバーに引っ越すことにしました。
最大の理由としては、fc2のライトプランだとphpのバージョンの関係で自分が普段使っているフレームワークであるLaravelが使えないということで、比較的新しいバージョンのphpが使えるレンタルサーバーを調べたところ、さくらが無難かなということで決めました。
他にも、sshでログイン出来ることとかも大きかったです。これによってちょっとしたこと(いらないファイルの削除とか)が出来るようになって、いろいろ便利だと実感しています。
とはいえ、フォルダのリンク先の設定とか結構ややこしかったこともあったりします(この辺を参照)。でも今回の作業で多少はサーバーとかDNSとかインフラ関係の勉強になったし、まあよかったのかなと。
Laravelで作ったブログはこちらで、プログラミングとか技術的なことについては今後は主にそっちに書くと思います。というか会社の関係で、月1回は技術的な内容のブログを書いていて、それにその自作ブログを使うという意味合いもあります。
後はせっかく引っ越したことだし、もっと全体的にコンテンツの充実も図っていこうかと。

何はともあれ、今まで4年7か月ほど、fc2レンタルサーバーにはお世話になりました!さくらレンタルサーバー、これからよろしくお願いします!

PHPのオブジェクト指向

うわー、2週間も更新が止まってしまったorz
というわけで、久々の更新はPHPのオブジェクト指向について。

PHPはオブジェクト指向のプログラミング言語です・・・って、今時使われる言語でオブジェクト指向じゃない言語って、C(C++じゃないC)の他に思い浮かばなかったり。Cでも構造体とか使ってオブジェクト指向っぽくできないこともないし。

なので、PHPのオブジェクト指向で他の言語と違うところを中心に簡単にまとめてみようかと。
例としてお客さんを表すCustomerというクラスを考えてみることにする。

メンバー変数、メソッドをpublic(どこからでもアクセス可能), protected(そのクラスと子クラスからのみアクセス可能), private(そのクラスからのみアクセス可能)の修飾子を付けて定義するというのは他の言語と変わらないかと。
上の例ではCustomerクラスの変数$customerを最初に宣言して、$customerの年齢ageに25を入れています。
気を付けるのは、コンストラクタを__construct()で定義すること。C++やJavaから来た人だと、慣れないうちはついpublic Customer()と書こうとしちゃうかもしれないですね(自分の事です)。
後はクラス内のメンバーやメソッドを呼び出すときでも$this->を忘れないようにしましょう(結構これでエラーになることは多いです)。

後は、通常のメンバー変数やメソッドの他に静的(static)なプロパティやメソッドというものもあります。

staticなプロパティやメソッドはクラス名::を付けることでオブジェクトを生成しなくても呼び出すことができます。
なお、クラス内でstaticなプロパティやメソッドを呼び出すときはself::を頭につけます。

次は、継承についてです。

見てのとおり、extendsを付けて継承します。Javaもそうでしたね。オーバーライトなんかも他の言語と同様にできます。
ちなみに、PHPでは多重継承は不可です。が、トレイトというものを使うことで多重継承のようなことができるようです。自分は使ったことはないので、こちらあたりを見てみてください。

後はabstractをつけて抽象クラスを定義できたり、interfaceをつけてインタフェースを定義できたりします。

フレームワークなんかはバリバリにオブジェクト指向を使っているので、フレームワークのソースを見てみると、オブジェクト指向の有用性を実感できると思います。

Javascriptのオブジェクト指向は普通のクラスベースではなくプロトタイプベースという独特なものなので、どこかでそれについても紹介しようと思います。

PHPの文字列関数

毎日更新シリーズ、どうにか1週間続けることができたぞ!まさに、継続は力なりか。

さて、今日はPHPの文字列処理によく使われる関数をいくつか紹介していこうと思います。結構便利な関数がいろいろあるので、使いこなせるようにしておきたいところです。

strlen, mb_strlen
文字列の長さを取得する関数です。例えば

だと、5が返ってきます。気を付けなければならないのは、

だと、4ではなく8が返ってきてしまいます。日本語はマルチバイト文字なので、このような場合は

とmb_がついた関数を使います。

substr, mb_substr
ある文字列の一部の文字列(例えば、3文字目から4文字文とか)を取り出す関数です。(0から始まるので、3文字目から5文字目だとsubstr(文字列、2、4)になります)
substr(元の文字列、開始位置(、取り出す文字列の長さ))という感じです。3つ目の引数を入れないと、開始位置を起点に最後までの文字列を取り出します。2番目の引数に0を入れると最初から、負の値を入れると最後から何文字目を起点にします。

だと’morn’となります。
mb_がついたやつの説明はさっきと同様です。

strpos, mb_strpos
ある文字列の中に、別の文字列が含まれているかどうかを調べます。

だと、5になります。これも起点は0で、2番目の引数が最初の引数に含まれなければfalseが帰ってきます。
mb_は以下同文

str_replace
ある文字列を別の文字列で置き換えます。str_replace(置き換える前、置き換えた後、文字列全体)です。

だと、’good afternoon’になります。

explode
文字列をある文字列で分解して配列で返します。

とやると、$data[0]=’192′; $data[1]=’168′; $data[2]=’255′; $data[3]=’254′; です。

trim
文字列の先頭と末尾のスペースとか余計なものを取り除きます。

とやると、’I am Japanese.’だけが返ってきます。
2つ目の引数に削除したい文字を指定して入れることができます。

だと、半角スペースと’.’が消えるので、I am Japaneseになります。

他にどんなの関数があるかは公式ページを見てください。

PHPのスーパーグローバル変数

目指せ毎日更新シリーズ第3弾として、PHPのスーパーグローバル変数について紹介してみる。
スーパーグローバル変数というと、何だかすごくカッコ良さそうな名前だけど、簡単に言うと、Webページ間を行ったり来たりするときに情報のやり取りのために裏で持たせておく情報を保存する場所といったところか。

まずは、$_GETについて。使われる場面としては検索フォームの検索ワードとかブログの何ページ目を見ているかとかの情報で、例えばこのブログの2017年1月のアーカイブのURLに出ている?m=201701がそれにあたる。意味はmというパラメータに201701という値を入れてリクエストを送信したということ(これをGET送信という)。GET送信では複数のパラメータを送ることもできて、2つ目以降だとこんな風に&でつながれる。
デバッグするときは

とやると上のケースでは4が入っていることがわかる。

次は$_POSTについて。これは画像ファイルを送信したり掲示板にコメントを送信したり、URLには入りきらないような大きなデータを入れるのに使う。

このようなフォームのテキストボックスに「こんにちは」と入れて送信すると、post.phpでは$_POST[“comment”]に「こんにちは」が入っていることになる。

それ以外ではクッキーの値が入る$_COOKIEと、セッションの変数を保存する$_SESSIONが比較的よく使われる。

クッキーはWebページのユーザー情報なんかをブラウザに持たせて読み込ませるためのもので、

みたいにsetcookie関数を使ってクッキーをブラウザに保存させることができる。この例だと$_COOKIE[‘id’]に$idの値を1週間保存させるということになる。

セッションはクッキーとは逆にサーバー側に情報を保存させるためのもの。
ユーザーのログイン情報とかを保存するのに使われる。

他にどんなものがあるかなどは公式ページを見てください。

とここまで書いてきて何だが、実は自分は仕事ではこれらはほとんど使っていなかったり。なぜなら、仕事ではフレームワークを使っていて、これらのスーパーグローバル変数はフレームワークの関数でラッピングされているからなわけで。

PHPの配列

ブログの更新頻度が低いままなのもアレなんで、今日からなるべく毎日少しでもブログに何か書いてみることにする。
旅行とか、特にネタがないときはぱっと思いついた技術ネタを少しづつ。更新にかける時間は1日15分くらいを目安に無理のない範囲で。

目指せ、毎日更新シリーズ第1弾は、PHPの配列について。

PHPは初めて教わったのが去年のセブ島なのは今までにも書いたとおりだけど、配列とかの扱いがC言語とかに比べてすっごい便利だと感じた(もちろんC言語にはC言語の良さがあるんだけど)。
まず、C言語だと最初に

みたいに領域を確保するか、あるいは領域を固定させたくない場合は

のようにポインタを使うしかなかった。
それが、PHPでは

と初期化された状態から

と領域を確保しなくても配列に値を追加できるし、もっと簡単に

とかすることもできる。
C++だとVectorをつかって

とかもできるけど(Vectorも初めて使ったときはすごい便利だと思ったものだ)、PHPの簡素さには及ばないか。

他にも、

とか特に宣言しなくても要素に整数以外の値を入れて連想配列みたいに使うことができるっていうか、普通の配列と連想配列の区別がない。
いわば、C++のVectorとmapのいいとこ取りという感じか。C++だったら演算子定義とかもできるからそれを使えば自分で似たようなものを作ろうと思えば作れるんだろうけど(そもそもPHP自体Cで書かれてるからそうやって作ったんだと思うけど)。

他にも、便利な関数もたくさんあって、とにかくいろんなことが簡単にできるというのが新鮮だった。
とはいえ、便利で自由な分自分が今何をやっているかを常に気を付けておく必要があるのだが。

PHPの配列は結構奥が深かったりするので、また時間があるときにもっと掘り下げてみようかな。