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環境ではハマるかもしれない。
- windowsだと
useキーワードはいらないの?
混乱する原因と言うか、なんというか。。w
HTMLで言うところのbasename
のような使い方とPython
のfrom
キーワードのような使い方ができる。
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();