PHP:PHPの基礎知識 第1回 PHPの基礎的な概要について|PHP7初級試験対策

これからPHPを覚えようとしている方やPHPの資格を取りたい方などの参考になればと思い、何回かに分けて更新していきたいと思います。

まず今回はPHPの基礎となる概要や特徴について、絶対に覚えておくべきポイントや要点などをまとめました。
PHPを学びたい方の参考になると嬉しいです。

 


 

PHPとは

PHPとはオープンソースのプログラミング言語です。
多くのWEBサイトやWEBアプリケーションの開発で利用されています。

 

PHPの特徴について

PHPの利用する場合、ライセンス料は必要ありません。また、PHPはオープンソースです。

PHPはプログラムをコンパイルせずに実行するスクリプト言語。
動的なWEBページの生成が可能で、HTMLへの埋め込みやWEBアプリケーションの開発に利用できます。

WEBサーバで実行されるので、サーバサイドスクリプト言語と言われます。
また、Javascriptなどはクライアント側で実行されるので、クライアントサイドと言われています。

 

PHPの動作環境やデータベースについて

PHPはWindows、Mac、Linuxなど様々なプラットフォームに環境を構築することができます。
※UNIX環境で使用できる。

PHPが動作するWEBサーバは、ApacheやIISなどCGI規格をサポートするWEBサーバで動作します。

PHPは様々データベースをサポートしており、代表的なものは下記になります。
MySQL、PostgreSQL、SQLite、Oracle、Microsoft SQL Serverなど。

 

PHPの記述について

PHPの開始タグ終了タグは下記の書き方で記述します。

開始タグ:<?php
終了タグ:?>

<?php
// 処理内容
?>

 

PHPの区切り文字には「;」(セミコロン)が必要です。
なので以下のように文の終わりには「;」(セミコロン)を記述します。
「;」(セミコロン)の記述がないとパースエラーになります。

echo "Hello World";

 

コメントアウトについては以下のいずれかの方法でコメントすることができます。
また、コメントは行の末尾に記載することも可能です。

行コメント(「//」または「#」)

// コメント
# コメント
echo "Hello World"; // コメント

 

複数行コメント(「/* コメント */」)

/*
コメント
コメント
*/

 

ホワイトスペースは、半角スペース、タブ、空行、改行です。
コードの間に空行を入れてソースコードを見やすくすることが大事になります。
入れすぎるのは可読性が下がる可能性があるので注意が必要です。ただ、プログラムには影響しないので、正常にプログラムが走ります。
※全角スペースはホワイトスペースではない。

 

関数名の大文字・小文字については、予約語(キーワード)や関数名は大文字と小文字を区別する必要がないので、どちらで書いた場合でも、また大文字と小文字が混在していても処理することができます。
※変数名は大文字と小文字を区別する必要があるので注意。

 

PHPの基礎についてのポイント

上記、PHPの基礎的な内容について記述しました。
ポイントとしては下記になります。

  • PHPはライセンス料が必要ない
  • PHPはオープンソースである
  • プログラムをコンパイルせずに実行するスクリプト言語
  • WEBサーバで実行される(サーバサイドスクリプト言語)
  • CGI規格をサポートするWEBサーバで動作
  • PHPは様々データベースをサポート
  • PHPの「開始タグ:<?php」と「終了タグ:?>」の記述
  • PHPの区切り文字には「;」(セミコロン)
  • コメントアウトは「//」「#」「/* コメント */」
  • ホワイトスペースは、半角スペース、タブ、空行、改行
  • 関数名の大文字・小文字は区別しない

 


 

今回はPHPの超基礎的な内容について記載しました。
PHPで開発する上で基本的な内容となるので、初めての方はしかっり覚えておくのがいいと思います。

また、初級試験にも出てくる内容です。
これから受ける方はちゃんと理解しておくことが重要になります。

PHP:PHP7初級試験(PHP技術者認定試験)の資格取得合格への受験対策や学習方法などについて

PHP7初級試験を受けてきて、無事合格することができたので、資格取得への受験対策や学習方法についてメモしたいと思います。

難易度はそこまで難しい試験ではないと感じますが、試験までにどんな勉強をした方がいいのか、勉強時間がどのくらい必要かなど受験してみてわかったところがあったので、これからPHP7初級試験を受験する方への参考になれば嬉しいです。

また、私の場合はある程度PHPでの開発経験があったので、プログラム経験がない方(全くの初心者)はしっかり期間を取って対策する必要があるかと思います。
ただ、初級はそこまで難易度の高いレベルではないと思うので、PHPの基本的な知識を身につけて過去問などを何度か繰り返し行なって、内容をしっかり理解できるようになれば全然いけると考えています。


PHP7初級試験(PHP技術者認定試験)とは

PHPの知識・スキルを認定する試験で、PHP技術者認定機構の民間資格になります。
PHP7初級試験はITスキル標準(ITSS)のレベル1に該当します。

PHP7初級試験(PHP技術者認定試験)の概要

下記がPHP7初級試験の概要になります。
※2020年3月時点

種類:初級試験
受験料:12,000円
設問数:40問(28問正解で合格)
試験時間:1時間
合格ライン:7割(合計1000点満点、700点以上で合格)
出題形式:選択式(単一選択または複数選択)

受験料は決して安くはないと思うので、しっかり対策してから挑むことをお勧めします。

また、試験時間は1時間ですが私の感覚だと30分から40分くらいあれば一通りの問題に解答できるかと思います。
なので不安がある問題などは一通り終わった後に再度見直すことや選択式で複数選択の問題もあるので、間違えないように注意することが大事かと思います。

試験までの流れと当日までの流れ

まずは試験会場を探して、申し込みをします。
試験当日はOdysseyへのログインが必要になるので、事前にOdyssey IDの登録をしてた方がいいと思います。
(会場でも登録することはできると思いますが)

この「受験の流れ」に試験会場とOdyssey IDについて記載があります。

当日までの流れとしては、試験会場によって違うかと思いますが、私の場合は試験の1週間ほど前までに受験料の支払いを済ませる必要がありました。

当日は開始時間前までに身分証明書(顔写真付き)を持って会場にい行けば大丈夫かと思います。
試験が終われば、その場で合否が判定されるので、試験結果レポートを受け取って終わりとなります。

出題範囲

出題範囲は下記項目から1〜4問くらいが出題されます。(変更になる可能性もあり)
各項目ごとに重要なポイントをしっかり抑えておくことが大事になります。

  • PHPの特徴
  • テキストと数の操作
  • ロジック:判定と繰り返しについて
  • データのグループ:配列の操作
  • ロジックのグループ:関数とファイル
  • データとロジックの結合:オブジェクトの操作
  • ユーザとの情報交換:Webフォームの作成
  • 情報の保存:データベース
  • ファイルの操作
  • ユーザの記憶:クッキーとセッション
  • 他のWebサイトやサービスとのやり取り
  • デバッグ
  • テスト:プログラムが正しく動作するようにする
  • ソフトウェア開発で心得ておきたいこと
  • 日付と時刻
  • パッケージ管理
  • メールの送信
  • フレームワーク
  • コマンドラインPHP
  • 国際化とローカライゼーション

難易度・勉強方法

上記でも話しましたが難易度としては、そこまで高いレベルではないかと思います。
PHPでの開発経験がある方は、勉強しなくてもわかる問題は結構ありますし、改めて勉強しなくても受かる可能性は全然あるかと。

ただ、私の場合6〜7年くらいPHPの開発はしていますが、問題集を解いた時に意外と基本的なことがわかっていなかったり、こうだろうという曖昧な部分も多くあったので、開発経験者でも一通りは問題集を解いてみた方がいいと感じました。

私のオススメの勉強方法は書籍が一番かなと思います。
PHP7初級試験の認定教材でもある下記がわかりやすいです。

初めてのPHP

徹底攻略PHP7技術者認定[初級]試験問題集

ある程度経験がある方は問題集だけで十分だと思います。
一通り問題集を解いてみて間違ったところを再度復習して、しっかり覚えることができれば合格できる可能性は高いと思います。

また、実務未経験者の場合は若干難しい試験かもしれません。
まずは上記の書籍をしっかりと読み込み理解することと、できれば実際にプログラムを書きながらどんな動作をするのかなど、ある程度実装してみて経験することが大事かと思います。

勉強時間の目安

勉強時間の目安ですが、私の感覚では経験者は1週間しっかり勉強すればいけると思います。
問題集を2往復くらいして間違ったところ、しっかりと覚えるといった感じでしょうか。

未経験者の場合は、2~3ヶ月くらい勉強期間としてとってた方がいいような気がします。
しっかり勉強すれば、2~3ヶ月くらいでも全然いけると私は思います。


今回はPHP7初級試験(PHP技術者認定試験)について、基本的な概要や合格に向けての学習方法などを記載しました。

試験の問題ではひっかけ問題も結構あるので、注意して読むことがとても大事です。
また、各項目ごとに重要なポイントがあるので、別の記事で試験対策に向けての内容を記載したいと思います。

まずはこれからPHP7初級試験の資格取得を目指す方の参考になれば嬉しいです。

Laravel:PHPUnitを使用してテストする際の基本的な実施方法

LaravelPHPUnitを使用してテストする際の基本的な実施方法などをメモします。

LaravelにはPHPUnitが標準で入ってます。なのでインストールする必要はありません。
どんなシステムでもテストは必要になってきますが、まずはPHPUnitでテストする際の基本的な操作方法などを記載します。


testsディレクトリの構成

まずはtestsディレクトリの構成についてです。
最初は下記の構成になっているのですが、サンプルのテストファイルが用意されています。

tests
 ├─ Feature
 │    └─ ExampleTest.php
 │
 ├─ Unit
 │    └─ ExampleTest.php
 │
 ├─ CreatesApplication.php
 └─ TestCase.php

基本的には上記のファイル構成ですが、実際のディレクトリ構成と同じようにディレクトリを作成することも可能です。

例としては下記のような感じになります。

tests
 ├─ Http
 │    └─ Controller
 │            └─ ExampleTest.php
 │
 ├─ Models
 │    └─ ExampleTest.php
 │
 ├─ CreatesApplication.php
 └─ TestCase.php

その際は「phpunit.xml」の内容を変更します。

    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>

        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>

        <testsuite name="App">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>

上記の例では↓の部分を追加しています。

        <testsuite name="App">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>

これを記述することで「./tests」ディレクトリがテストの対象となります。

 

テストファイルの作成

テストファイルを作成する場合は下記のコマンドを実行します。
すると「Feature」ディレクトリ内にテストファイルが作成されます。

php artisan make:test HogeTest

また、unitのテストを作成する場合は「–unit」をつけて下記を実行。

php artisan make:test HogeTest --unit

上記実行するとベースとなるファイルが作成されます。

 

テスト実行

コマンドから下記を実行することでテストを流すことができます。
注意するのがテスト全体だと複数人で開発をしていた場合は他の方が書いたテストコードまで実行してしまう恐れがあります。
また、ファイル名の指定だと指定した文字列がテストしたいファイル以外のファイル名にも存在する場合、そちらも実行してしまいます。

・テスト全体

./vendor/bin/phpunit

・ファイルパス指定

./vendor/bin/phpunit tests/Feature/ExampleTest.php

・ファイル名の指定

./vendor/bin/phpunit --filter=ExampleTest

 

テストの書き方

上記で作成したテストファイルにtestから始まるメソッドを用意して、テストを記述します。

    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }

または、コメントで「@test」をつけることでメソッド名にtestをつけなくてもテストとして実行することが可能です。

    /**
     * @test
     */
    public function BasicTest()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }

 


今回はLaravelPHPUnitを使用してテストする上で、基本的な実施方法などについて記載しました。
テストはプログラムを作成するときは必ず必要になりますので、しっかりテストを書けるように理解しながら進めることが大事だと思います。
また、DBなどが絡んでくる場合などは他にも設定した方がいいものなどありますが、また別の記事で記載したいと思います。

Laravel:Route::resourceの「only」と「except」でリクエストを制限する

Laravelルーティングでは「Route::resource」で指定することがあります。
「Route::resource」を指定するとCRUDのルーティングを1つの定義で行うことが可能になります。

一つ一つルーティングの指定を書いてもいいのですが、場合によっては「Route::resource」で指定した方がソースコードもスッキリし、可読性が上がるかもしれません。

ただ、不要なメソッドもあると思うので、その場合は「only」と「except」を使用し、不要なルーティングを制限することができます。
今回は「Route::resource」を使用した時の「only」と「except」の使用方法についてメモします。


Route::resourceの使い方

Laravelのルーティングの指定は「routes」ディレクトリ内のファイルに記載します。
※下記が例として「routes/web.php」に書いてる場合。

基本的な書き方

Route::resource('photos', 'PhotoController');

ルーティングの内容は下記のようになります。

+-----------+---------------------------+--------------------+------------+
| Method    | URI                       | Name               | Action     |
+-----------+---------------------------+--------------------+------------+
| GET       | /photos                   | photos.index       | index      |
| GET       | /photos/create            | photos.create      | create     |
| POST      | /photos                   | photos.store       | store      |
| GET       | /photos/{photo}           | photos.show        | show       |
| GET       | /photos/{photo}/edit      | photos.edit        | edit       |
| PUT/PATCH | /photos/{photo}           | photos.update      | update     |
| DELETE    | /photos/{photo}           | photos.destroy     | destroy    |
+-----------+---------------------------+--------------------+------------+

次のコマンドを実行すれば現在のルーティングを一覧で表示することができます。
ターミナルからコンテナ内で下記を実行。

php artisan route:list

使わないメソッドに関してはメソッドを消しているとエラーが起きてしまうので、ルーティングを制限しておく必要があります。
その際に「only」と「except」を使用します。

 


「only」で使用するメソッドを指定

「only」で指定した場合、記述したメソッドのみリクエストすることが可能になります。

onlyを使用した場合の例

Route::resource('photos', 'PhotoController', ['only' => ['index','show']]);

上記の例では「index」と「show」のみ許可しています。

+-----------+---------------------------+--------------------+------------+
| Method    | URI                       | Name               | Action     |
+-----------+---------------------------+--------------------+------------+
| GET       | /photos                   | photos.index       | index      |
| GET       | /photos/{photo}           | photos.show        | show       |
+-----------+---------------------------+--------------------+------------+

 

「except」で使用しないメソッドを指定

「except」で指定した場合、記述したメソッド以外のリクエストが可能になります。
なので、除外したいメソッドを記述します。

exceptを使用した場合の例

Route::resource('photos', 'PhotoController', ['except' => ['edit','create']]);

上記の例では「edit」と「create」以外のリクエストを許可している形になります。

+-----------+---------------------------+--------------------+------------+
| Method    | URI                       | Name               | Action     |
+-----------+---------------------------+--------------------+------------+
| GET       | /photos                   | photos.index       | index      |
| POST      | /photos                   | photos.store       | store      |
| GET       | /photos/{photo}           | photos.show        | show       |
| PUT/PATCH | /photos/{photo}           | photos.update      | update     |
| DELETE    | /photos/{photo}           | photos.destroy     | destroy    |
+-----------+---------------------------+--------------------+------------+

 


今回はLaravelルーティングで「Route::resource」を使用した時の「only」と「except」の使用方法について記載しました。
この辺りを理解しておくとルーティングの記述を綺麗にまとめることができると思います。

Laravel:Non-static methodのエラーが発生した時の対応方法

Laravelで「Non-static method」のエラーが発生した時の対応方法をメモします。

このエラーはstaticではないメソッドを呼び出すときに発生します。
Laravelに限らずではありますが。。。

下記に「Non-static method」エラーの説明と対応方法を記載します。


「Non-static method」のエラー内容

実際のエラー内容としては、下記のようにエラーが出力されます。
簡単にいえば「staticではないですよー」ってことですね。

ErrorException: Non-static method App\Models\Hoge::getHoge() should not be called statically

 

「Non-static method」エラーになる原因

例で下記のようにコントローラーからモデルのメソッドを呼び出します。

【Controller】

下記は「Hoge」モデルクラスの「getHoge」メソッドを呼び出しています。

use App\Models\Hoge;

class SampleController extends Controller
{
    public function index()
    {
        Hoge::getHoge();
    }
}

 

【Models】

下記の場合はエラーになってしまいます。
原因はfunctionに「static」が無いからです。

class Hoge extends Model
{
    public function getHoge() {
        // 処理
    }
}

なので「static」があればエラーにならず正常に動作します。

class Hoge extends Model
{
    public static function getHoge() {
        // 処理
    }
}

 

「Non-static method」エラーの対処方法

上記のように「static」付ければ解決することはできますが、モデルを変更できない場合はコントローラー側で下記のように呼び出すとエラーとならずメソッドを呼び出すことができます。

【変更前】

use App\Models\Hoge;

class SampleController extends Controller
{
    public function index()
    {
        $res = Hoge::getHoge();
    }
}

 

【変更後】

use App\Models\Hoge;

class SampleController extends Controller
{
    public function index()
    {
        $model = new Hoge();
        $res = $model->getHoge();
    }
}

このように呼び出すことによって「Non-static methodエラーを解消することができます。

 


今回は「Non-static methodエラーが発生した時の対応方法について記載しました。
以外と忘れてしまうことがあるのでメモします。