PHPビルトインサーバーの使い方とnamespaceについて

Macに入っていたバージョンは7.1.7だった

CLIで勉強でもすっかと思ってバージョン確認してみた。

$ php -v
PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
  • phpコマンド通ったので何かで入れてたのか・・・?
  • Macって標準で入ってた。
  • せっかくだしつかおう。

PHPのビルドインサーバー機能を使う

最近良く知られるようになったがPHPには簡易的なサーバー機能がある。

とても簡単にできるのでテストとかにはちょうどいいが、動作モードや権限が違うためApacheなどのサーバー用アプリの開発には向いていない。

開発に使うというよりは手軽に始めたい人向けと言える。

ちなみに、公式のページでは以下のような文が掲載されている。

警告
このウェブサーバーは、アプリケーション開発の支援用として設計されたものです。 テスト用に使ったり、制約のある環境でアプリケーションをデモするために使ったりすることもできるでしょう。 あらゆる機能を兼ね備えたウェブサーバーを目指したものではないので、 公開ネットワーク上で使ってはいけません。

コマンドはこうなってる。

$ php [options] -S <addr>:<port> [-t docroot] [router]
  • [options]
    • サーバー起動時のPHPの設定値などの指定だと思う(適当Â
    • テスト程度では特に必要ないのでは??
  • <addr>
    • アドレスの指定、よく見かけるのはlocalhostとかの指定
  • <port>
    • ポートの指定、8080とか80とか4649とか好きなの入れたらいいんじゃない?
  • [-t docroot]
    • ドキュメントルート
    • サイトのトップページとか置いているところ
  • [rooter]
    • HTTP Requestを処理するPHPスクリプトを指定できる。
    • リクエストに対して特別なことをしたいときだけ必要なんじゃない?

というふうに、結構複雑なこともできそうだけど、ぶっちゃけ業務では使うなっちゅ~ことですな。

なのでrouterなんかいらんのとちゃう?

まあ、使うならこんな感じのコマンドになるわけだ。

$ php -S localhost:8080 /path/to/document/root

PHPのnamespaceを使っていこう

PHPの関数読み出しの機能にnamespaceという物がある。

Pythonでいうとモジュールが近いだろう。

C#のネームスペースとは違うかな?

よくわかってないので軽くやっとこう。

まず読み出すClass関数を適当に作ろう

  • 作業ディレクトリにlibsディレクトリを作る。
  • その中にMyclass.phpを作る。
<?php
namespace libs;

class MyClass {
    static function test() {
        echo 'echo in MyClass';
    }
}

呼び出しする

  • lisbと同じ階層にindex.phpを作る。
<?php

// import class file
require __DIR__ . '/libs/MyClass.php';

// call test function on MyClass
libs\MyClass::test();
  • \はバックスラッシュ。
    • windowsだとマークだったりするんだけど、Macだと区別されるので気をつけよう。
    • windows環境の場合はマークでも問題ないがMac環境ではハマるかもしれない。

useキーワードはいらないの?

混乱する原因と言うか、なんというか。。w

HTMLで言うところのbasenameのような使い方とPythonfromキーワードのような使い方ができる。

basenameのような使い方

長いnamespaceや途中まで一緒のnamespaceを省略するために使用する。

<?php
namespace App\Lib\Mail {
    function AnalizeHeader {...}
    function DecordBody {...}
}
require __DIR__ . '/libs/Mail.php';
use App\Lib\Mail as Mail;

Mail\AnalizeHeader();
Mail\DecordBody();

Pythonのfromのような使い方

クラス名まで指定して使用する

require __DIR__ . '/libs/MyClass.php';
use libs\MyClass;

MyClass::test();
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.