CodeIgniter for Non-Programmers

ノンプログラマーのためのPHP, CodeIgniter, MySQL入門

第1回 PHPの基礎(1) - PHPファイルの構成

PHP

PHP とは

PHP は「PHP: Hypertext Preprocessor」の略で、頭文字を取って「PHP」です。

詳しくは Wikipedia でも読んでください。

あとマニュアルは必須。

PHPとはなんでしょう?」という項目があるので、読んでおいてください。

PHPファイルを開く

ここでやることは、CodeIgniter に含まれるPHPファイルを読んで、PHPのプログラムがどのような構成になっているかを理解することです。

テキストエディタを起動して、次のファイルを開いてください。

controllers/welcome.php

特に断りがない場合を除き、ファイルの場所は CodeIgniter をインストールした場所の下にある application フォルダからの相対パスで書きます。

つまり、controllers/welcome.php は、CodeIgniter を /Applications/MAMP/htdocs にインストールしたとすると、絶対パスでの表記は

/Applications/MAMP/htdocs/application/controllers/welcome.php

となります。

じゃ、開いてください。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

    /**
     * Index Page for this controller.
     *
     * Maps to the following URL
     *      http://example.com/index.php/welcome
     *  - or -  
     *      http://example.com/index.php/welcome/index
     *  - or -
     * Since this controller is set as the default controller in 
     * config/routes.php, it's displayed at http://example.com/
     *
     * So any other public methods not prefixed with an underscore will
     * map to /index.php/welcome/<method_name>
     * @see http://codeigniter.com/user_guide/general/urls.html
     */
    public function index()
    {
        $this->load->view('welcome_message');
    }
}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */

最初はこのファイルをいじります。

上から順番に、何が書かれているのか、説明します。

PHPファイルの先頭に書かなければいけないこと

1行目

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

PHPのスクリプトは必ずこの「<?php」で始まらなければいけないルールになっているので、自分でファイルをつくるときも忘れないでください。

それに続く if ... の文は、CodeIgniter のルールでして、こういう意味です( [ ] 内に、上記の文の中で該当する箇所を記します)。

もし [if]、BASEPATH が定義されて [defined] いなかったら [ ! ]、'No direct script access allowed' と表示して終了しなさい [exit]。

プログラムと日本語の解説を逆にした書き方をすると、

if [もし] ( ! [いなかったら] defined [定義されて] ('BASEPATH')) exit [終了しなさい] ('No direct script access allowed');

'No direct script access allowed' の意味は分かりますか?

「スクリプトへ直接アクセスすることはできません」

だいたいこんな意味ですが、なんのこっちゃですね。

この文 ( if から後ろ)は、セキュリティのためのおまじないです。

これはいずれ解説します。ずいぶん後になるかもしれませんが...。

今は、CodeIgniter の中の約束事だということだけ覚えておいてください。

クラスの宣言

では、2行目は空白行なので飛ばして3行目

class Welcome extends CI_Controller {

これを同様に訳すと、

CI_Controller というクラスを拡張した [extends]、Welcome という class [クラス] です。

プログラミング用語的に言うと、「宣言」というやつです。

「ここには Welcome という名前の、 CI_Controller を拡張したクラスのことを書きまーす」

ということです。

今後、自分でクラスを作成することになりますが、この名前は自分で決めなければなりません。

名前は大事です。

適当な名前はつけずに、吟味して名前をつけましょう、自分の子供に名前をつけるみたいに。

いずれ近いうちにクラスをつくることになるので、そのことはあらためてそのときに。

後ろの「 { 」は「ここから始まるよー」という意味の記号です。 色々な場所で使えます。

PHP界隈の偉いひと達によると、こうやって2行に分けて書いた方がいいとされています。

class Welcome extends CI_Controller
{

お作法というやつですね。

ちょっとめんどくさいことですが、やっておきましょう。

初心者は「守」が大事です。「破」に行くのはもうちょっと先、ということで。

「クラス」という概念を理解するのはまだ先でいいですが、とりあえず「機能やデータを管理する容器(カプセル)」とでも覚えておいてください。

「機能やデータ」というところがポイントです。

では、次行きます。

コメント

5〜19行目

  /**
     * Index Page for this controller.
     *
         (中略)
     * @see http://codeigniter.com/user_guide/general/urls.html
     */

これは「コメント」と呼ばれ、プログラムコードではありません。

/* 

で始まって

*/

終わります。

この間に書かれた文字はすべてコンピューターには無視されます。

あれ?「/**」じゃないの?と思われた方、鋭い!

これは phpDocumentor という API ドキュメント生成ツールで使われる書式なのですが、なんのこっちゃですね。

興味のある方は、PHPDoc でググっていただくか、以下の公式サイトを見てみてください(英語ですが)。

http://www.phpdoc.org/

とりあえず今は、

クラス宣言やメソッド宣言の前にコメントを書くときは「 /** 」で始める

とだけ覚えておいてください。

上記の書式は複数行のコメントを書く際に使いますが、一行だけのコメントは以下のような書き方ができます。

// この書式だとこの行だけコメントになります

/* こう書いてもいいんですが、上の方が楽ですね */

と二通りの書き方ができるというわけです。

人間が読んで、プログラムコードの意味をより理解できるようにするために、処理やデータについての補足や注意事項を書いておきます。

コメントというのは奥が深くて、コメントを読むと、そのひと(プログラマー)の性格や力量がちらりと見えてきます。

基本的には、自分以外のひとに理解してもらうために書くわけですが、1ヶ月後の自分は他人、くらいの気持ちで、自分のためにもコメントを書いておきましょう。

ただ、やっていることが自明(コードを読んだだけで何をやっているかが一目瞭然)である場合は、書かなくていいです。

一行ごとにコメントが書かれていると正直うざいですからね。

さて、次。

メソッドの宣言

  public function index()
    {

これは「メソッド」と呼ばれる機能の宣言です。

ここには「index」という機能を書きますよー、という宣言です。

「public」というのは「アクセス指定子」と呼ばれ、このメソッドの公開範囲を定めています。

アクセス指定子には三種類ありまして、

  • 「public」=「公開」
  • 「protected」=「限定公開」
  • 「private」=「非公開」

となっております。

このうち、public と private だけ今は覚えてください。

誰に公開するの?という疑問が浮かんだと思いますが、とりあえず今は「他のクラス」と覚えておいてください。

他のクラスからアクセスできるのが public で、他のクラスからアクセスできないのが private です。

開発が進むと、色々なクラスに色々な機能(メソッド)を書いていくことになります。そうすると、色々な事情で、「このメソッドを他のクラスから実行されると困る」というシチュエーションがやってきます。

それはまた別のお話なので、後日また。

続く「function」は「これはメソッドです」という宣言です。

「method」ってしてくれればいいんですが、大人の事情(?)で「function」になっています。

同じ「function」という単語を使った「関数」というのもありますので、最初のうちは混乱します。

クラスの中に書かれているときは「メソッド」、クラスの外に書かれているときは「関数」と覚えておいてください。

あらためて、この行の意味は、

public function index()

「ここから、他のクラスからアクセスできる index という名前のメソッドを書きます」

です。

メソッドの名前も、クラスと同様、自分で決めなければなりません。 これも、近いうちにメソッドをつくることになるので、そのときに考えましょう。

あ、忘れるところだった。

ここでも「 { 」が出てきましたね。「(メソッドが)ここから始まるよー」ということです。

次。

変数

      $this->load->view('welcome_message');

先頭の「 $ 」は「これは変数です」というマークです。「 $this 」という変数ということです。

変数というのを説明すると1時間くらいかかってしまうのでざっくり言うと、データを入れておく容器みたいなものです。

厳密に言うとちょっと違うんですけど、ようするに、何らかの情報が入っていて、それは変えることができます、ということです。「変」というのは「変えられる」という意味です。

タッパーをイメージしてください。

あなたはタッパーに夕食の残りものを入れておいて、それを翌朝食べるとします。

「タッパー」が変数で、「夕食の残りもの」がデータです。

メタファーを使うとかえって分かりにくい場合もあるので、この辺で止めておきます。

$ の後に続く「this」は、特殊な変数で、自分自身のことです。 他の言語では、「 self 」なんていう名前がついていることもあります。「 Me 」とかね。

つまり「$this」は、この変数の書いてある場所である「index」メソッドが属している「Welcome クラス」のことを指します。

うーむ、ややこしい。

上記のコードをもう一度見てください(コメントは省略します)。

class Welcome extends CI_Controller
{
    public function index()
    {
        $this(省略)
    }
}

$this は index メソッドの中に書かれていて、index メソッドは Welcome クラスの中に書かれています。

この $this は、Welcome クラスを指します。

最初は理解できなくても、あるときパッとひらめく時がくるので、ざっくりこんなかんじで覚えておいてください。

さて、次は「->」という記号です。

変数およびメソッドへのアクセス

      $this->load->view('welcome_message');

「load」というのは「変数」です。

$this (つまり Welcome クラス)にある「load」という変数にアクセスしています。 「->」という記号がなんとなく「アクセスする」という動詞と結びつきませんか?

ここで、あなたはこう思うはずです。あれ?ちょっと待って、変数には「 $ 」マークをつけるんじゃないの?

これもルールなので覚えてもらうしかないんですが、「->」の後ろには $ はつけません。 「->」がないときは $ をつける。あるときはつけない。 実は「->」の後に $ がつくケースがあるんですが、さらなる混乱を呼びそうなので今は触れないでおきましょう。

ここでもうひとつ疑問が浮かびます。

$this ってのは Welcome クラスのことなんでしょ?で、loadってのは、Welcome クラスにある変数なんだよね?でも、なんでここにいきなり出てきてるわけ?

至極真っ当な疑問です。

その疑問にはいずれお答えします(先送り事項が多すぎて忘れちゃいそうですが、忘れてたら、あれどうなった?ってつっこんでください...)

その後にもうひとつ -> が続いて、「view」というメソッドを呼び出しています。 「呼び出す」というのは実行する、ということです。 一見、load のように変数かな?とも思いますが、view の後に「 ( 」があるので、これはメソッドです。

で、() でくくられた部分に入っているのが、引数(ひきすう)と呼ばれる、メソッドを呼び出す際に渡す情報です。

$this->load->view('welcome_message');

Welcomeクラスにある load 変数の view メソッドに 'welcome_message' という情報を渡して実行してください

という意味になります。

これを読んだだけでは分かりませんが、これは CodeIgniter の機能で、welcome_message.php というファイルを表示[view]してください、という命令です。

$this->load->view('login_form');

と書き換えると、login_form.php というファイルを表示してください、に変化します。

つまり、ここを書き換えることで、どのファイルを表示するのかを指示することができるわけですね。

これが引数の役割です。

あ、引数の「welcome_message」の後ろの「.php」が含まれてないことに気づいたあなたは鋭いですね。

これは、まぁ、そういうもんだと覚えてください。

さて、最後の「 ; 」をあやうく忘れるところでした。

これは文の終わりを意味します。 文を書くときは、最後にこの記号を書いてください、忘れずに。

そして、23行目

      $this->load->view('welcome_message');
    }

この「 } 」は、メソッドはここまでです、という意味です。

「 { 」が始まりで、「 } 」が終わり。

これも忘れるとエラーになるので、メソッドの終わりには「 } 」だけの行を最後に書いてください。

これで全部かな。

あ、忘れるところだった。

これで最後

24行目

}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */

この「 } 」はクラス宣言の終わりです。

これも忘れると(ry

最後の2行はコメントです。

CodeIgniter の作法では「最後にこのコメントを書いておけ」ということになっていますが、別になくてもいいです(笑)

ファイルがここで終わっているのは自明ですからね。

さて、1行もコードをかかずじまいでした。

疲れたのでこの辺で。

次回は、今度こそ、コード書きますよ!