#【php】Web API関連メモ
自分用のメモです。
##namespace
namespace 名前空間名;
- 名前空間を定義する。
- 同一名のクラスや関数などが定義できるようになる。(衝突によるエラーや上書きを防ぐ)
- 一番上に書く。(HTMLやファイル読み込みよりも上)
▼使い方
名前空間\呼び出したいもの
- 名前空間\関数名()
- 名前空間\変数
<?php
namespace name1;
function hello(){
return 'こんにちは';
}
namespace name2;
function hello(){
return 'Hello';
}
?>
<?php
//ファイル読み込み
require_once 'method.py';
//関数の呼出し
echo name1\hello();
echo name2\hello();
?>
//出力
こんにちはHello
##use as
use 名前空間名 as エイリアス名;
名前空間を作成し、エイリアス化する
名前空間が長い場合に使う。
use AAA\BBB\CCC\DDD as name3;
└ 名前空間「AAA\BBB\CCC\DDD」を「name3」と定義。
▼asがない場合
use AAA\BBB\CCC\DDD
└ 名前空間は「DDD」になる
##function 関数名(array 引数)
(型 引数, 型 引数,,,)
は型宣言。配列を指定。
渡された引数の方が指定と違う場合にエラーを返す。
間違いの早期発見用。
function test(array $list, int $val)
//$list:配列
//$val:整数
##アロー演算子(->)
##クラス名->$プロパティ名
クラス名->$プロパティ名
指定したクラスのプロパティを取得。
クラス内で呼び出す場合は、$this->$プロパティ名
※アロー関数はJS
##インスタンス名->関数名()
インスタンス名->関数名()
インスタンスの中で関数を呼び出す。
└ インスタンスの入った変数。
##require dirname(DIR). '絶対パス';
ファイルを読み込む。
//以下は同じ
require dirname(__DIR__) . '/path/ファイル名.php';
require dirname(__FILE__) . '/path/ファイル名.php';
require ( __DIR__ . '/path/ファイル名.php');
require dirname(__DIR__) . '/vendor/test.php';
この場合、後から追加したライブラリ(vendorが保存場所)のtest.phpというファイルを読み込んでいる。
$this->request->controller;
$this->request['controller'];
$this->request->params['controller'];
##コメントアウト + @(アットマーク)
パラメータや変数の説明。
//@param [型] 変数名 説明
//@var [型] 説明
//@return [型] 説明
▼使用例
class Userdb
{
private $name;
private $db;
/**
* コンストラクタ
*
* @param Users $name
* @param Database $db
*/
public function __construct(Users $name, Database $db)
{
$this->name = $name;
$this->db = $db;
}
キー=>値
連想配列のキーと値の指定は「=>」
array (key1=>値1, key2=>値2, key3=>値3,,,)
キーの名前で値を呼び出す
##array_shift
array_shift(配列名)
配列の一番最初の要素を抜き出す。
破壊的。実行後、元の配列からその要素が抜ける。
$lists=array("aaa","bbb","ccc");
$data1=array_shift($lists);
echo "0番目の要素:".$data1."。<br>";
print_r($lists);
////出力
//0番目の要素:aaa
//("bbb","ccc");
##argc, argv
$argc
: 引数の個数(Argument Count)
▼ファイル実行時に、引数を渡し、その引数の値をつかう
if ($argc === 1) {
echo '引数は1つです', PHP_EOL;
exit(1);
}
$argv
: 引数の値 (Argument Value)
//入力値 aaa bbb ccc
$argv[0] //aaa
$argv[1] //bbb
$argv[2] //ccc
//変数に格納
$answers = $argv
##PHP_EOL
実行環境のOSで改行を行う。
実行環境に合わせ、下記に変換される。
・windows:「\r\n(CRLF)」
・Linux系: 「\n(LF)」
echo "aaa".PHP_EOL."bbb".PHP_EOL."ccc";
////出力
//aaa
//bbb
//ccc
##eixt()
処理の終了
exit(整数)
エラーのステータスコードを整数にする。
画面表示はされない。
##json_decode関数
JSON形式のデータを変換する。
$a = json_decode(JSON形式のデータ)
└ オブジェクトを返す
└ {"obj1":値1,"obj2":値2}
└ $a{obj1} → 値1
$a = json_decode(JSON形式のデータ, true)
└ 連想配列に変換
└ array(obj1=>値1, obj2=>値2)
└ $a[obj1] → 値1
##Pimple
- DIコンテナの一つ
- インスタンスの生成を一括実行するファイル。
- DI用の設定データを保存している
container.php
- 「$変数名= インスタンス生成処理」が省略できる
- 引数の数が大幅に減る
use Pimple\Container;
$container = new Container();
//または
$container = new Pimple\Container();
##DI
DI:Dependency Injection
依存性のあるデータ(インスタンスの生成)などを変数で与える。
- クラスとの依存性が低くなるため、動的に変更可能になる。
- クラスをいじらず、注入しているデータ元をいじれる(メンテ簡略化)
##guzzle http
外部APIの実行。
//guzzleのりーソスを生成し、requestメソッドで送信
new GuzzleHttp\Client([
'handler' => $handler,
'base_uri' => 'http://www.example.com',
]);
- base_uri: アクセスするURLのベースとなるもの。(必須)
- handler: リクエストヘッダーにつけるパラメータを指定。配列形式で複数指定可能。(オプション)
▼応答データの取得(文字列)
$response->getBody()
###request
Client->request('メソッド', 'URL');
└ メソッド:GET or POST
指定したURL(またはパス)からデータを取得する。
$response = Client->request('POST','/test', ['json' => データ]);
・Client= GuzzleHttp\Client
・/testファイルにjson形式でデータを渡し、その結果をPOSTで受け取り、$responseに格納.
##Cake PHP
ruby on railsの思想をベースに作成したPHP用のフレームワーク。
▼Cake PHP
- コマンドや規則が充実。
- スピード感重視で作成できる。
- 自由度が低い。
▼Lravel
- 自由度が高い
- 最新技術も導入しやすい
簡単なサイト作成ならCake PHP, がっつり組みたいならLaravel。
###インストール
composer
で行う
└ 作業ディレクトリ毎にインストール
composer install
###MVCモデル
Model(Routing)
View
Controller
Controller(処理の割り振り) -> Model(データ処理)-> View(表示)
###ディレクトリ構成
####PJディレクトリ
ディレクトリ | 内容 |
---|---|
cake | CakePHPの中心部分となるライブラリファイル類がまとめられている |
plugins | プラグインのプログラムを組み込むためのもの |
app | Webアプリケーションを配置していくディレクトリ あらかじめ定められたルールでファイルを配置し開発していく |
venders | ライブラリ類を後から追加するときに利用されるところ |
gitignore | git用のファイル |
htaccess | Webサーバの動作に関する設定ファイル |
index.php | CakePHPのディレクトリのインデックスファイル このディレクトリにアクセスしたときにこのページが表示される |
README | 最初に読むドキュメント |
#####appディレクトリの中身
ディレクトリ | 内容 |
---|---|
config | CakePHPで利用される各種の設定情報を保管。Routingファイルもこの中。 |
libs | ライブラリファイルを追加する場所 |
controllers | プログラムの制御に関するソースコードを追加していく |
locale | 言語・地域情報に関するファイルを保管する |
models | データベースアクセス関係のソースコードを追加していく |
plugins | 機能追加のためのプラグインファイルを追加する |
tests | テストに関するフレームワークを追加する |
tmp | プログラム実行中に作成される一時ファイルの保管場所 |
vendors | ライブラリ類を後から追加するときに利用されるところ |
views | ページレイアウトのためのファイルを追加していく |
webroot | CakePHPによるWebアプリケーションのルートになる ここにファイルを入れるとルートに配置された状態で呼び出される |
.htaccess,index.php | このディレクトリのWebサーバの設定情報とデフォルトページ |
- cakeフォルダは基本触らない
- 編集や追加をするのは基本appフォルダ
###Configuration
環境設定:config/bootstrap.php
から読み込まれる。
初期状態は「config/app.php」のみ存在。
自分で、「config/bootstrap.php」を追加し設定を書き込むと、 bootstrap.php側の設定が読み込まれるようになる。
インスタンスの生成や、関数の作成を行う
$product = new 名前空間\クラス名();
$product['server_db'] = function ($c) {
return new 名前空間2\クラス名(dirname(__DIR__) . '/var/server_db.txt');
};
###Routing
「config/routes.php」で設定する。
Router::connect('入力URL', ['controller' => 'コントローラー名', 'action' => 'アクション名(開くページ)']);
Router::connect('/top', ['controller' => 'Home', 'action' => 'index']);
(ドメイン)/topが入力されたら、HomeContorllerのindexというアクションを実行する。
####パラメータの取得と呼び出し
▼格納
:プレースホルダ名
▼呼び出し
['プレースホルダ名' => '\d+']
Router::connect('/top/:top_id', ['controller' => 'Home', 'action' => 'index'], ['top_id' => '\d+']);
###Request
- デフォルトのリクエストを扱うクラス。
- リクエストのデータの管理・操作を行うときに使用
- 大本のデータはCake\Network\Request
- 呼び出し:
$this->request
- requestの中にパラメータが入っている。
- Controller、View、Cell、Helperからアクセス可能。
▼パラメータへのアクセス方法
//param or params
$this->request->params['controller']; // 複数形(params)
$this->request->param('controller'); // 単数形(param)
▼GETのパラメータ
$this->request->query
取得データは連想配列になっている。
/home?name=aaa&age=25
$this->request->query; # array('name' => 'aaa','age' => '25')
▼POSTの場合
$this->request->data('name.aaa');
$this->request->data['name'];
###Controller
▼ファイルの場所
src/Controllers/コントローラー名Contoller.php
- 各Controllerは
AppController(src/Controllers/AppController.php)
を継承
→冒頭に「namespace App\Controller;」がある。
###saveメソッド
$this->Model->save("キー名", 値)
$this->db->save('name', 'tanaka');
▼保存したデータの取得
fetchを使う
$this->db->fetch('name');