※この記事にはプロモーションが含まれています
PHP言語って、難しいですよね。
僕も学び始めたころは、わけがわかりませんでした。CMS(ホームページ制作ツール)で世界トップのシェアを誇るワードプレス(WordPress)は、このPHPで開発されています。なので、WEB制作者としては避けて通れない言語なのですが、これが結構、難しい。
「比較的、習得しやすい言語だよ!」という人もいます。でも、それは嘘ですね。僕は独学だったというのもありますが、かなり大変でした (笑)
この記事では、PHPを学び始めたばかりの人に向けて、つまずきやすい学習ポイントBEST5を紹介します。これらを理解すれば、PHPの学習がスムーズに進むでしょう。実際に僕自身がつまずいたところでもあるので、どのように理解していったのか、具体的な事例を交えながら解説しますね。
初心者向け、PHP言語の学習ポイント勝手にベスト5
まずは、初心者がつまずきやすいランキングBEST5から発表しましょう。なお、僕自身が感じた独自のランキングなので人によって異なる可能性があることをご了承ください。(でも、経験者なら「わかるわかる」と頷いてくれると思います。)
- 変数と値と代入、宣言
- 条件文
- ループ(繰り返し処理)
- 関数
- 配列
いずれも、PHP言語の基礎です。この5つがわからないと、おそらく挫折します。すべて完璧に理解する必要はありませんが、それぞれの意味と目的は押さえておきましょう。
変数と値と代入、宣言
「そもそも、変数って何?」となりませんでしたか? 僕はそこからつまずきました。
PHPでは特に、この変数の扱いが重要です。変数を使ってデータを格納し、処理するからです。「格納?」「処理?」と頭に浮かんだ方も、安心してください。身近な具体例をあげます。
おもちゃ箱をイメージしてください。
「変数」は、LEGOや人形に名前をつけて、おもちゃ箱に入れるようなものです。つまり、おもちゃ箱(=変数)におもちゃ(=データ)を入れる(=格納)ということですね。名前をつけたおもちゃは、適宜、取り出すことができます。
変数は「おもちゃ箱」である
次のように考えてみましょう。
あなたが「おもちゃ箱」の中に「野球ボール」を入れました。php言語風に記述すると、こんな感じです。
$おもちゃ箱 = ‘野球ボール’;
このように、おもちゃ箱に野球ボールを入れることを「変数を代入する」といいます。「代入ってまたわかりにくい……」と学び始めたときに感じましたが、要は「おもちゃ箱に何か入れる」ことなんですね。
変数には、名前をつける文法(ルール)が存在する
ただし、プログラミング言語には文法(ルール)があります。「ボール 箱 野球」では、何がどうなってるのか意味がわからないですよね。日本語では「おもちゃ箱に、野球ボールを入れました」と言わないと伝わりません。
変数のもっとも基本的なルールは下記の3つです。
1.変数の先頭にドル記号($)を付ける
2.変数を定義するには(=)を使う
3.変数には半角英数字を使う
他にも、英字の大文字と小文字を区別できたり、数字やアンダースコア以外の記号で変数名を始めることはできないなど、細かいルールはありますが、上記3つを抑えれば8割理解できたといえるでしょう。学んでいくうちに自然とわかってくるので、初めからひとつひとつ完璧を求めないことが、最速で習得する秘訣かな、と思います。
ということで、php言語で「おもちゃ箱に、野球ボールを入れました」ということを記述すると下記のようになります。
$toybox = ‘baseball ball’;
$toybox という名前の変数に ‘baseball ball’ という値を入れています。このように記述することを「宣言」というわけです。こうすることで、複雑なデータを管理できるようになります。
この変数の意味するところを理解したうえで、続きを読んでいただくと、いっそう理解が深まると思いますよ。
条件文
条件文も、始めの頃は、分かるようでわかりませんでした。「ある条件が成り立つ場合に特定のアクションを実行するためのもの」なので、まあ意味は分かります。
まずは、例題を提示しましょう。
先ほど、変数を「おもちゃ箱」に例えました。例にならって、おもちゃ箱(変数)とおもちゃ(データ)を通じて説明しますね。
条件文を使って、おもちゃの種類によって、次のようなアクションを実行するとします。
もし「おもちゃ箱(toybox)」に「野球ボール(baseball ball)」が入っていれば「友だちとキャッチボールをする」。
もし「おもちゃ箱(toybox)」に「パズル(puzzle)」が入っていれば「家族でパズルをする」。
もし「おもちゃ箱(toybox)」に「ゲーム(game)」が入っていれば「妹とマリオカートをする」。
それ以外のものが入ってなければ「何だコレ!」とする。
これをPHPのコードで表現すると以下のようになります。
if ($toybox == 'puzzle') {
echo '家族でパズルをする';
} elseif ($toybox == 'baseball ball ') {
echo '友達とキャッチボールをする';
} elseif ($toybox == 'game') {
echo '妹とマリオカートをする ';
} else {
echo '何だコレ!';
}
このコードでは、(if、elseif、else)という条件文を使用して、表現しています。この条件文に、変数を代入することで、実行する処理が変わるんですね。
たとえば、
$toybox = 'baseball ball';
と宣言すれば「友だちとキャッチボールをする」というのがWEBブラウザに表示されますし、
$toybox = 'game';
と宣言すれば「妹とマリオカートをする」と表示されます。では、次のように記述するとどうなると思いますか?
$toybox = 'succer';
そう、「何だコレ!」です。
条件文は、特定の条件に合致する場合に何かを実行するということができます。WEBサイトの構築では「トップページのみ1カラムにして、そうでないブログページなどは2カラムにする」「固定ページのみ、更新情報を5個表示させる」などよく使います。
ループ(繰り返し処理)
ループ(繰り返し処理)は、同じタスクを何度もくり返して行うための方法です。
これも条件文と同じで学び始めたころは「いや、わかるけど……」となりました。例によって、おもちゃ箱(変数)で説明しますね。
想像してみてください。
おもちゃ箱(toybox)にボール(”baseball”というデータ)が10個入っています。それぞれのボールに、「Fighters」というチーム名を書かなくてはなりません。
でも、10個のボールを一つ一つ取り出してチーム名を書くのは大変ですよね。そんなとき、ループを使えば、100個でも1000個でも一瞬です。もちろん、プログラム上では、ということですが。
PHPのループ(繰り返し処理)はそのような同じ作業を何度も繰り返すことができます。コードで表現すると下記のようになります。
$toybox = 'baseball baseball baseball baseball baseball baseball baseball baseball baseball baseball'; // おもちゃ箱にボールが10個入っているという意味
$balls = explode(' ', $toybox); // 文字列をスペースで分割して、explode関数で各ボールを配列に格納(※のちほど詳細に解説)
foreach ($balls as $name) {
echo "この「$name」に「Fighters」と書く<br>";
}
これまでと比べると、グッと難易度があがりましたね。それもそのはず。
ループは、「関数」や「配列」を使うケースが出てくるので、それが関数や配列だとわかることと、その意味を理解しないと訳が分からなくなります。
なので、同時に「関数」と「配列」がやっていることを分解して、説明しましょう。
関数
関数とは、ものすごく簡単に言うと「これやって!」と指示することです。上記の例でいうと、explode 関数というのを、使っています。下記の部分ですね。
explode(' ', $toybox);
これはどんな指示を出しているかというと「おもちゃ箱から取り出したボールを、1個1個個別に認識してね」と伝えてます。同じボールが10個入っていて、それぞれにチーム名を書きたいからです。
もう少し補足すると、$toybox というおもちゃ箱(変数)には、ボールが10個(’baseball baseball baseball baseball baseball baseball baseball baseball baseball baseball’)入っているわけです。
「explode(‘ ‘, $toybox)」とすることで、baseballを「半角スペース」で分割し、各baseballを個別の要素として $balls に入れてる(格納)んですね。こうすることで、$balls にはおもちゃ箱の中に入っているボール1個1個を取り出すことができるようになります。
ちょっと分かりづらいかもしれないので、たとえば「半角スペース」ではなく「カンマ」で分割して、配列に格納する別のケースを見てみましょう。
$toybox = 'baseball,basketball,tennisball';
$balls = explode(',', $toybox);
このコードでは、$toybox の文字列を「カンマ」で分割し、それぞれのボールを個別の要素として含む $balls に入れています。違いは、「半角スペース」か「カンマ」か。explode関数は、explode(‘〇〇’,変数)とすることで、変数の要素の〇〇を個別に取り出すことができるということです。
print_rという関数で、$ballsの中身を取り出してブラウザに表示することができるので、実際にやってみましょう。
$toybox = 'baseball,basketball,tennisball';
$balls = explode(',', $toybox);
print_r($balls);
結果はこんな感じです。
Array
(
[0] => baseball
=> basketball
=> tennisball
)
今回の事例から少し反れてしまうのですが、関数について理解するのに苦しんだケースを次にご紹介しておきます。
関数を定義するか、組み込みの関数を使用するか
学び始めた方は、関数って、functionで宣言するんじゃなかったっけ?と思われたかもしれません。僕も思いました。でも、関数は「自分で定義するもの」と、すでに「PHP言語に組み込まれたもの」と2つあるんです。(そんなの常識だよ、という方は読み飛ばしていただいて構いません。)
つまり、PHPにおいて、function を使用するかどうかは、関数を定義するか、組み込みの関数を使用するかに関連しています。簡単にそれぞれのケースを解説しますね。
組み込みの関数を使用するケース:
最初にお伝えしておきます。組み込み関数をすべて覚える必要はありません。
PHP言語には標準搭載されているだけでも約4600個あるので、そもそも無理ですね。でも、エクセルで表計算ができる方は「sum」とか「count」とかご存じでしょう。エクセルとPHPの関数は記述も違いますが、そうした初歩的な関数の概念は共通するところも多いです。組み込み関数は「そんなものだ」と思っておけば良いのではないでしょうか。
組み込み関数は、定義しなくても実行することは決まってるので、function を使う必要はありません。
$result = count($array);
この例では、count はPHPの組み込み関数で、配列内の要素を数えます。この場合、新しい関数を定義する必要はありません。
他にも、事例をあげてみましょう。
strlen 関数
strlen($text);
この関数は、指定された文字列($text)の長さを取得します。ブログタイトルの文字数を数えたりするのに便利です。
strtolower 関数:
strtolower($text);
この関数は、指定された文字列($text)内のすべての文字を小文字に変換します。大文字と小文字の区別を無視する場合に使用します。
array_push 関数:
array_push($array, $item);
この関数は、指定された配列($array)に新しい要素($item)を追加します。配列に要素を追加するのに便利です。
date 関数:
date('Y-m-d H:i:s');
この関数は、現在の日付や時刻を指定された形式で表示します。日付と時刻のフォーマットを指定して表示するのに便利です。
ワードプレス用に設計された組み込み関数
ちなみに、ワードプレスには、ワードプレスの環境内で使用するために設計された組み込み関数というのがあります。あまり深追いすると終わらないので、その一部と一般的な用途を紹介しますね。
get_the_title 関数
echo get_the_title();
投稿のタイトルを取得します。
the_content 関数
the_content();
投稿またはページのコンテンツを表示します。
wp_list_categories 関数:
wp_list_categories();
カテゴリの一覧を表示します。
the_time 関数:
the_time('Y年m月d日');
投稿の公開日時を表示します。
キリがないので、こんなところにしておきましょう(笑)
function を使用するケース:
カスタムの関数を作成したい場合、function を使います。
どういう場合に使うかというと、例えばワードプレスでWEBサイトを作る場合。WordPressの組み込み関数では実現できない機能やタスクを実装するときに必要になります。
ワードプレスは、テーマやプラグインで対応できることも多いのですが、function を使いこなせると、開発の幅が劇的に広がるのは間違いありません。
ワードプレスで独自のショートコードを作る
たとえば、下記のように記述すれば、独自のショートコードを作ることができます。
function custom_shortcode_function($atts) {
return 'これはカスタムショートコードのコンテンツです。';
}
add_shortcode('my_custom_shortcode', 'custom_shortcode_function');
このコードでは、custom_shortcode_function というカスタム関数を定義し、カスタムショートコード [my_custom_shortcode] を作成しています。このショートコードを投稿やページに挿入すると、「これはカスタムショートコードのコンテンツです。」が表示されます。
ワードプレスで新しい投稿タイプを作る
よくある依頼で、WordPressに新しいカスタム投稿タイプ「ポートフォリオ」を設けてほしいというのがあります。そんなときは、下記のように記述します。
function register_portfolio_post_type() {
$labels = array(
'name' => 'ポートフォリオ',
'singular_name' => 'ポートフォリオ',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-portfolio', // アイコンの指定
);
register_post_type('portfolio', $args);
}
add_action('init', 'register_portfolio_post_type');
このコードでは、register_portfolio_post_type というカスタム関数を定義して、新しいカスタム投稿タイプ “ポートフォリオ” を登録しています。必ずと言っていいくらい、求められるのでアーカイブページやカスタムアイコンも設定しました。
何をしているか、具体的に説明しましょう。
register_portfolio_post_type 関数:
register_portfolio_post_type はカスタム関数の名前で、新しいカスタム投稿タイプ “ポートフォリオ” を登録する役割を果たします。
ラベル設定 ($labels 配列):
$labels 配列は、このカスタム投稿タイプに関するラベルを設定します。’name’ は複数形の名前、’singular_name’ は単数形の名前を指定します。この場合、投稿タイプの名前は「ポートフォリオ」となります。
引数設定 ($args 配列):
$args 配列は、カスタム投稿タイプの設定情報を保持します。
‘labels’ キーは先ほど定義したラベルを含む $labels 配列を指定します。
‘public’ キーが true に設定されているため、この投稿タイプは一般に公開され、ウェブサイトの管理画面で表示されます。
‘has_archive’ キーも true に設定されているため、アーカイブページが自動的に生成されます。
‘menu_icon’ キーにはダッシュアイコンクラス ‘dashicons-portfolio’ が指定されており、管理画面のメニューアイコンとして使用されます。
register_post_type 関数:
register_post_type 関数は、WordPressに新しいカスタム投稿タイプを登録するための関数です。
‘portfolio’ はカスタム投稿タイプのスラッグ(識別用の一意の名前)であり、この名前で投稿タイプを識別します。
$args 配列には、カスタム投稿タイプの設定情報が含まれています。
add_action 関数:
add_action 関数は、WordPressのアクションフック ‘init’ に register_portfolio_post_type 関数を関連付けます。
‘init’ アクションはWordPressの初期化時に実行されるため、ここで register_portfolio_post_type 関数が呼び出され、カスタム投稿タイプが登録されます。
要は、組み込み関数はWordPressの標準的な機能にアクセスするために使用し、カスタム関数はプロジェクトの特定の要件に合わせてカスタマイズしたコードを記述する際に使用するということですね。双方、自由に扱えればWordPress環境下のWEB制作を効果的に開発できます。
配列
5つ目のつまずきポイントは配列です。
PHPにおける配列は、複数の値を入れることができるデータ構造です。難しく聞こえますが、おもちゃ箱の事例でいえば、おもちゃ箱(=変数)に、野球ボールやパズル、ゲーム、ジェンガ、LEGOなどのおもちゃ(=データ)が色々入ってるということです。
PHP言語で表現すると、こんな感じですね。
$toybox = array('野球ボール’, ‘パズル’, ‘ゲーム’, ‘ジェンガ’, ‘LEGO’);
配列の機能として理解しておきたいのは、入れたデータには自動的に番号がふられること。左から順に、「0」「1」「2」「3」「……」と自動的に番号が付与されます。そうすることで、各データにアクセスできるんですね。
たとえば、$toybox[0] は最初のおもちゃ “野球ボール” を表し、$toybox は2番目のおもちゃ “パズル” を表します。番号が「0」から振られることに注意してください。
このように、配列は複数の要素を一つの変数にまとめ、各要素にインデックスを付けることで、異なるデータを効率的に管理できます。おもちゃ箱のように、様々なものを一か所にまとめて保存するときに便利ですよね。
では<おもちゃ箱に入れた10個のボールに「Figters」とチーム名を書く>事例をもう一度、見てみましょう。以下に、再度、コードを掲載します。
$toybox = 'baseball baseball baseball baseball baseball baseball baseball baseball baseball baseball';
$balls = explode(' ', $toybox);
foreach ($balls as $name) {
echo "この「$name」に「Fighters」と書く<br>";
}
配列がどんな役割をしているかを含めて、変数、ループ、関数についても、補足しながら、一つ一つ分解して解説しますね。
$toybox について:
$toybox は、大きな箱(変数)で、その中にたくさんの「baseball」(野球ボール)が詰まっています。
$toybox = 'baseball baseball baseball baseball baseball baseball baseball baseball baseball baseball';
上記は、この箱に10個の「baseball」が入っていることを意味します。ポイントは、各ボールのすき間に「半角スペース」があること。これによって、「baseball」は区切られているということになります。
$balls について:
$balls は、$toyboxを整理するための<別の箱>のようなものだと考えてください。このときに「配列」が使われます。
$balls = explode(' ', $toybox);
とすることで、$toybox の中から野球ボールをひとつずつ取り出して、それぞれを個別の箱に入れ、まとめることができます。つまり、 $balls は10個の小さな箱(野球ボール)を並べたものといえるでしょう。
explode 関数について:
復習になりますが、explode 関数は、大きな箱である $toybox の中の野球ボールを、スペース(空白)を使って一つずつ取り出して、それぞれの小さな箱(野球ボール)に分けるためのものです。こうすることで、 $balls という箱(配列)に10個の野球ボールが順番に入ることになります。
foreach ループについて:
foreach ($balls as $name)
foreach ループは、 $balls という別の箱(配列)の中に入っている10個の小さな箱(野球ボール)を順番に取り出し、それぞれに対して同じ作業を繰り返します。
($balls as $name) の部分は、$balls という配列内の各要素を $name という一時的な変数に置き換える役割を果たします。つまり、$balls の中の「baseball」ボールを一つずつ手に取るようなものですね。
echo について:
echo "この「$name」に「Fighters」と書く<br>"
echo は、野球ボールの一つ一つに「この「$name」に「Fighters」と書く」と伝えます。「$name」はこの場合、「baseball」のことです。
ちょっと、ややこしいかもしれませんね。今回、おもちゃ箱に入っているのはすべて「baseball」ですが、たとえば「succerball」「tennisball」「bascketball」がはいっているケースを想定すると良いでしょう。
今回は、おもちゃ箱の中身が野球ボール10個なので、下記のように記述しました。
$toybox = 'baseball baseball baseball baseball baseball baseball baseball baseball baseball baseball';
これを、WEBブラウザに表示させると、下記のような感じになります。
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
この「baseball」に「Fighters」と書く
仮に、おもちゃ箱の中身を、「baseball」「succerball」「tennisball」「bascketball」がはいっているとして、それ以外は同じコードで記述してみましょう。
$toybox = 'baseball soccerball tennisball basketball';
$balls = explode(' ', $toybox);
foreach ($balls as $name) {
echo "この「$name」に「Fighters」と書く<br>";
}
こうすれば、下記のように表示されるます。
この「baseball」に「Fighters」と書く
この「soccerball」に「Fighters」と書く
この「tennisball」に「Fighters」と書く
この「basketball」に「Fighters」と書く
【参考】初心者が犯しやすいミス
最後に、PHP言語を記述ウするときに、初心者が犯しやすいミスをお伝えしておきます。僕の場合、エラーが出たら次の3つのうちのどれかでした。
1.セミコロン(;) を忘れる
PHP言語でセミコロンは、文の終了を示す基本的なルールですが、これを忘れてエラーになることが多かった。
2.スペルミス
僕のようなおっちょこちょいにはつきものですが「baseball」と書かなきゃいけないのに「baseballl」としたり、「$name」を「$Name」としたり、些細なスペルミスには気をつけましょう。
3.カンマとドットを間違える
キーボードでもキーが隣ですし、ずっと作業していると、間違って入力しても全く気づきません。
上記は、優秀な方には共感いただけないかもしれませんね(笑)
まとめ
この記事では、PHPを学び始めたばかりの人に向けて、つまずきやすい学習ポイントBEST5を紹介させていただきました。独自の見解も多々、含まれていると思います。僕自身がつまずいたところを中心に解説しましたが、振り返れば基礎的なことばかりですね。
あなたのPHP学習の助けになれば、幸いです。長々とお読みいただき、ありがとうございました。