特徴
- HTMLがPHPファイル内で書ける
- <?php 処理 ?>これだけでコードが走る
- 終わりの ?> の部分は省略できる
- エントリーポイントがわかりにくい(PHPを扱う環境によって調べ方があるようだ。)
変数
- 頭に【$】をつける。
- 変数の型は推論型で型指定不要。
- 予約語が使えるが非推奨。
- floatはdoubleで返される。正確な型を知るには【var_dump(変数)】を使用する。
- ブール型は true で 1 だが false は何も入らない。
- 文字、文字列を扱う時はシングルコーテーションを使う。HTMLは普通にダブルコーテーション。
- スコープ特殊で関数外変数は関数内と同じ変数名を使用しても別扱いとなる。関数外の変数を扱う場合 $変数 の前に global を付けて宣言し直す。例 global $変数;
スーパーグローバル変数
元々PHPで定義されている変数のこと、$GLOBALS以外は $_ から始まる。
PHP内のどこからでも呼べる
- $GLOBALS
- 関数外で宣言した変数の中身を参照することができる
- 書き方変数 $GLOBALS[‘変数’]
- 書き方配列 $GLOBALS[‘配列変数’][インデックス番号]
- クラス等オブジェクトはアロー演算子で参照可
- 書き方 $GLOBALS[‘new後の変数’]->メンバ変数
- $_SERVER[]
- 現在の鯖環境を取得できる
- 一覧
$_SERVER
- $_GET[‘キー’]
- GETページの値を取得できる
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
- $_POST[‘キー’]
- POSTページの値を取得できる
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
- $_FILES[‘キー’]
- アップロードされたファイルの情報を取得できる
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
- HTMLフォームで
<input type="file" name="myfile">
のようにファイルを選択して送信すると、$_FILES['myfile']
にアップロードされたファイル情報が格納される- $_FILES[‘myfile’][‘name’] : 元のファイル名
- $_FILES[‘myfile’][‘type’] : MIMEタイプ
- $_FILES[‘myfile’][‘size’] : ファイルサイズ(バイト)
- $_FILES[‘myfile’][‘tmp_name’] : 一時保存先パス
- $_FILES[‘myfile’][‘error’] : エラーコード(0なら正常)
- ファイルを保存するには
move_uploaded_file()
を使う
- $_COOKIE[‘キー’]
- クッキーの情報を取得できる
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
- $_SESSION[‘キー’]
- ユーザーごとに一時的なデータ(ログイン情報など)を取得できる
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
- $_ENV[‘キー’]
- 環境変数の取得ができる
- 鯖やOSの設定値が取得できる
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
- php.iniの設定やWebサーバーの設定によって値が取得できない場合あり
- $_REQUEST[‘キー’]
- $_GET、$_POST、$_COOKIE をまとめたもの
- 中身は連想配列になっていて[]にキーを記述すると値が取れる
$_SERVER
主な引用元https://qiita.com/With21/items/1c0520921d8729813473
- $_SERVER[‘PHP_SELF’]
- PHPファイル名の取得
- $_SERVER[‘GATEWAY_INTERFACE’]
- CGIのバージョンの取得
- $_SERVER[‘SERVER_ADDR’]
- IPアドレスの取得
- $_SERVER[‘SERVER_NAME’]
- ホスト名の取得
- $_SERVER[‘SERVER_NAME’]
- レスポンスヘッダ上の識別文字列の取得
- $_SERVER[‘SERVER_PROTOCOL’]
- プロトコル名とバージョンの取得
- $_SERVER[‘REQUEST_METHOD’]
- リクエストのメソッド名の取得
- $_SERVER[‘REQUEST_TIME’]
- リクエスト時間の取得
- $_SERVER[‘REQUEST_TIME_FLOAT’]
- リクエスト時間をマイクロ秒まで取得
- $_SERVER[‘QUERY_STRING’]
- アクセスされた際の検索引数の取得
- $_SERVER[‘DOCUMENT_ROOT’]
- ルートディレクトリの取得
- $_SERVER[‘HTTPS’]
- HTTP通信の時は’on’でなければ 空 が取得される
- 使う時は詳しく調べたほうが良さげ
- $_SERVER[‘HTTP_ACCEPT’]
- Accept: ヘッダの取得
- $_SERVER[‘HTTP_ACCEPT_CHARSET’]
- Accept-Charset: ヘッダの取得
- $_SERVER[‘HTTP_ACCEPT_ENCODING’]
- Accept-Encoding: ヘッダの取得
- $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]
- ブラウザの言語設定の取得
- $_SERVER[‘HTTP_CONNECTION’]
- Connection: ヘッダの取得
- $_SERVER[‘HTTP_HOST’]
- ホスト名の取得
- $_SERVER[‘HTTP_REFERER’]
- 現在のページに遷移する前にユーザーエージェントが参照していたページのアドレスの取得
- 使われていない場合や変更されている場合があり信頼できないらしい
- $_SERVER[‘HTTP_USER_AGENT’]
- User-Agent: ヘッダの取得
- $_SERVER[‘REMOTE_ADDR’]
- 閲覧者のIPアドレスの取得
- $_SERVER[‘REMOTE_HOST’]
- 閲覧者のホスト名の取得
- $_SERVER[‘REMOTE_PORT’]
- 閲覧者のWebサーバーへの通信に使用しているポート番号の取得
- $_SERVER[‘REMOTE_USER’]
- 認証されたユーザー名の取得
- $_SERVER[‘REDIRECT_REMOTE_USER’]
- リダイレクトされた時の認証されたユーザー名の取得
- $_SERVER[‘SCRIPT_FILENAME’]
- PHPのファイルの絶対パスの取得
- $_SERVER[‘SERVER_ADMIN’]
- 管理者のメールアドレスの取得
- ただし、この変数はWebサーバーによって提供され、全てのサーバーで利用できるわけではない可能性があります
- $_SERVER[‘SERVER_PORT’]
- 鯖側の通信ポート番号の取得
- 使用時は調べなおし
- $_SERVER[‘SERVER_SIGNATURE’]
- 鯖のバージョン名とバーチャルホスト名の取得
- 設定が有効じゃないとダメ
- $_SERVER[‘PATH_TRANSLATED’]
- ファイルシステムベースのパスの取得
- $_SERVER[‘SCRIPT_NAME’]
- 現在実行されているPHPスクリプトのパスの取得
- 例
path/to/my/page.php
にアクセスした場合/path/to/my/page.php
- $_SERVER[‘REQUEST_URI’]
- アクセスに使用されたURLの取得
- $_SERVER[‘PHP_AUTH_DIGEST’]
- Digest認証を行った場合、クライアントから送信された「Authorization」の取得
- $_SERVER[‘PHP_AUTH_USER’]
- HTTP認証しているときにそのユーザー名の取得
- $_SERVER[‘PHP_AUTH_PW’]
- HTTP認証しているときにそのユーザーのパスワードの取得
- $_SERVER[‘AUTH_TYPE’]
- HTTP認証しているときにその認証形式の取得
- $_SERVER[‘PATH_INFO’]
- 実際のスクリプトファイル名とクエリ文字列の間にある、クライアントが提供するパス名情報の取得
- 例 http://www.example.com/php/path_info.php/some/stuff?foo=bar という URI でアクセスしていた場合は、/some/stuff
- $_SERVER[‘ORIG_PATH_INFO’]
- PHPで処理される前の ‘PATH_INFO’ の原本の取得
ABSPATH
/home/servername/username/public_html/ が格納されている
ダッシュボード → ツール → サイトヘルス → 情報 → WordPress 定数で確認できる
コメントアウト
C言語と同じ。
// 一行
/**/ 範囲
配列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $aaa = array(2); $aaa[0] = 1; $aaa[1] = 2; $bbb = array('ああ', 'いい'); $ccc = ['ああ', 'いい'] //多次元 $ddd = [ ['ああ', 'いい'],['うう', 'ええ'] ]; echo ($ddd[1][0]); //結果 //うう |
連想配列の書き方
通常の配列の宣言に => を使うと左がキー、右が値の連想配列ができる。
PHPの配列は配列の中に配列を入れられるので連想配列を連結することができます。
主にJSON形式にする場合に使用する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<?php $a = array('aaa' => '1', 'bbb' => '2'); $b = [ 1 => 'a', 2 => 'b' ] $aa = [ [ 'title' => 'タイトル1', 'reportDateTime' => '2025-09-07', 'weather' => '晴れ' ], [ 'title' => 'タイトル2', 'reportDateTime' => '2025-09-08', 'weather' => '曇り' ] ]; //キー毎にまとめる $bb = [ 'forecast1' => [ 'title' => 'タイトル1', 'reportDateTime' => '2025-09-07', 'weather' => '晴れ' ], 'forecast2' => [ 'title' => 'タイトル2', 'reportDateTime' => '2025-09-08', 'weather' => '曇り' ] ]; //アクセス方法 echo $a['aaa']; //出力 1 echo $b[1]; //出力 a echo $aa[1]['title']; //出力 タイトル2 echo $bb['forecast1']['reportDateTime']; //出力 2025-09-07 //要素の追加 $a['追加キー'] = '追加する値'; //要素の削除 unset($a['削除したいキー']); //要素の連結 $c = array_merge($a, $b); |
演算子
演算子はC言語とほぼ同じ。
イコール3つ === は厳密等価演算子と呼ばれ、値と型の両方が一致しているかを比較する
if文の書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $a = 1; if($a == 1){ echo ('あ'); }else if ($a == 2){ echo ('い'); }else{ echo ('う'); } ?> //結果 //あ |
繰り返し処理
foreachはC言語とかと変数の配置が逆かつ as を表記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php //for(スタート値; 継続条件; 増減){} for($i = 0; $i <= 3; $i++){ echo $i.'\n' //'\n'は改行'<br>'でも可 } ?> //break continue は使用可能 //結果 //1 //2 //3 //while <?php $i = 0; while($i < 3){ echo $i.','; $i++; } ?> //結果 //0,1,2 //foreach <?php foreach($配列とか as $取り出されて入る変数){ 処理 } ?> |
関数の書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php function aaa($a){ echo $a.'\n'; return $a++; } $b = aaa(1); //変数に代入が可能 $c = function($d){ echo $d; }; //セミコロン必須 $c($b); //結果 //1 //2 |
デフォルト関数(getが付く物はHTML内で使う時はechoを頭につける)
- echo
- 値を出力できる
- var_dump()
- echoでは出力されない詳細なデータを出力できる
- 型 + 値で出力される
- オブジェクトのプロパティや要素の詳細まで見れる
- print_r()
- var_dump()を見やすくした形式で表示
- echo_count()
- 配列の要素数を出力
- var_export()
- PHP形式のコードとして出力
- get_theme_file_url(‘テーマディレクトリからのパス’)
- テーマディレクトリまでのパスを取得する。
- HTMLで使うならechoを頭につけて使う。(取得するだけでhtmlのhref=””等の中に文字列として表示されないから)
- テーマ以下のファイルを読み込むときに便利
- home_url(‘必要なファイルのパス’)
- WordPressのトップのURLまでのパスを取得する。
- HTMLで使うならechoを頭につけて使う。(取得するだけでhtmlのhref=””等の中に文字列として表示されないから)
- get_header() & get_footer
- header.php footer.php をインクルード出来る
- header.phpの<head></head>内に<?php wp_head(); ?>必須
- footer.phpの</body>の直上に<php? wp_footer(); ?>必須
- header.phpの<body>の直下に<?php wp_body_open(); ?>必須
- header.php footer.php をインクルード出来る
- have_posts()
- 投稿(記事)存在判定
- the_posts()
- 投稿リストから最新の投稿を取り出して取り出した投稿を消す
- 恐らくオブジェクトで取得して一件ずつ吐き出す感じ
- これの下で投稿の何を表示するかとかの処理をするのが一般的
- the_title()
- タイトルの取得、表示
- the_date()
- 日付の取得、表示
- 引数で表示形式を変えれる(‘Y.m.d’で2025.9.10)
- 同じ日付がある場合2回目以降は出力しない
- 常に出力する場合はget_the_dateにする
- HTMLで表示させるにはechoを頭につける
- the_content()
- 記事の内容を取得、表示
- the_permalink()
- URLの取得、表示
- get_sideber()
- サイドバーの取得
- is_admin()
- 現在のリクエストが管理画面ページであるかどうか
- 現在のユーザーが管理者権限を持つかどうかを判定するものではなく、管理画面が表示されている状態かどうかを確認する目的で使用される
- is_main_query()
- メインクエリかどうか
- クラスのメソッド
- is_front_page()
- front.php存在確認
- frontはサイト全体のトップページを自由にカスタマイズするためのテンプレート(最優先にロードされる)
- is_home()
- home.php存在確認
- homeはブログの投稿一覧ページ(投稿インデックス)をカスタマイズするためのテンプレート(最新の投稿一覧)
- is_single()
- 投稿記事存在確認
- is_singulare()
- 引数に投稿タイプを入れてそれの存在確認をする
- カスタム投稿タイプを使用しているときに使える
- the_posts_pagination()
- ページタブの表示
- add_action()
- アクションフック、第一引数にフックする関数(アクション)
- 第二引数に追加する関数名(自分で作った関数)
- add_filter()
- フィルターフック、第一引数にフックする関数(アクション)
- 第二引数に追加する関数名(自分で作った関数)
- アクションとはフックする関数が呼ばれるタイミングと内容で使い分ける
API関連でよく使う関数
- register_rest_route()
- 独自のREST APIエンドポイントを登録します。
- add_action内でコールバック関数を登録する際に使用
- 例
- register_rest_field()
- REST APIレスポンスに独自フィールドを追加します。
- 例
- wp_send_json()
- JSON形式でレスポンスを返します。
- 例
wp_remote_get()
/wp_remote_post()
- 外部APIとの通信に使います。
- 例
- rest_ensure_response()
- レスポンスをREST API用に整形します。
- 例
- is_user_logged_in()
- 認証・権限チェックに使います。
- 現在のユーザーがログインしているかどうかを判定する関数
- 例
- current_user_can()
- ユーザー権限の判定に使います。
- WordPressで現在のユーザーが特定の権限(ロールやケイパビリティ)を持っているか判定する関数
- 例
クラス
変数や関数にアクセスするには -> を使う、その時変数の$が取れる。
public protected private 使用可能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php class Aaa { //PHPではクラスの頭文字を大文字にするのが慣習 public $a; public function __construct(){ //コンストラクタ、アンダーバー2つ echo 'hello'.'\n'; $this->a = 0; //$取れる } function aaa(){ echo 'あ' } } $b = new Aaa(); //インスタンス化 $b->a = 1; //$取れる $b->aaa(); echo $b->a.'\n'; //結果 //hello //あ //1 //未定義の変数は使用してもエラーが出ない、そして何も代入されない |
コロン構文
{}を使わない書き方 : と end~ に置き換える書き方。
これを使うと処理をまとめて書ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php for(): //処理 endfor; while(): //処理 endwhile; foreach(): //処理 endforeach; ?> //複数処理をまとめて書く <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> //表示処理 <?php endwhile; endif; ?> |
サブクエリ(任意のページのデータをDBから取得する)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $a = [ //クエリする条件を連想配列にする 'post_type' => 'post', //記事の種類 通常の記事(カスタムではない) 'posts_per_page' => 5 //ページ数 ]; $b = new WP_Query($a); //引数の条件のデータを取得するクラスをインスタンス化 ?> <?php //通常のデータ表示処理にインスタンス化した変数を追加 if ($b->have_posts()){ while ($b->have_posts()){ $b->the_post(); //表示灯の処理 } } wp_reset_postdate(); //メモリの解放(the_post()の)、必須 ?> |
アクションフック
特定の関数に処理を追加、または変更することができる
例:メインクエリで取ってくる最新の投稿10件分を特定の投稿タイプの時だけ9件に変更する
※functions_php に書く
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php function change_set_post($query){ if(is_admin() || !$query->is_main_query()) { return; } if(&query->is_post_type_archive('works')) { //worksタイプの投稿なら $query->set('posts_per_page', 9); //取ってくる最新の投稿記事数を9件に return; } } add_action('pre_get_posts', 'change_set_post'); //フック関数、第一引数にフックする関数第二引数に自作関数 //pre_get_postsはメインクエリが実行される直前の関数 |
xmlを扱う
準備として
file_get_contents()でxmlファイルを読み込み、
simplexml_load_string()でオブジェクト化する。
simplexml_load_file(‘ファイルパス’)でもok、これなら一行。
出来たオブジェクトからアロー演算子でアクセスする。
1 2 3 4 5 6 7 8 9 |
//xml中身 <Body>あああ</Body> <?php $a = simplexml_load_file('~~.xml'); echo $a->Body; //結果 //あああ |
xpathが使用可能
要素にアクセスする場合に xpath で指定することができ、直接アクセス可能。
ただし xml に名前空間(xmlns属性)がある場合、SimpleXMLElement
のxpath
はそのままでは要素を見つけられません。
xmlns= “~~” がある場合は registerXPathNamespace(‘変数’, ‘~~’) を使用してからパスの前に : を使って記述する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php //xml中身 <Control><Body>あああ</Body></Control> <?php $a = simplexml_load_file('~~.xml'); echo $a->xpath('//Body')."\n"; //xml中身 <Report xmlns="~~/" xmlns:jmx="~~" xmlns:jmx_add="~~"> // <Control><Body>いいい</Body></Control> $b = simplexml_load_file('~~.xml'); $c->registerXPathNamespace('変数', '~~'); // 実際のXMLの名前空間URIに合わせて変更(目的のパスの直上にあるxmlns=" ") echo $c->xpath('//変数:Body'); //結果 //あああ //いいい |
json変換
1 2 3 4 5 |
<?php $obj = simplexml_load_file('~~.xml'); $json = json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); //json形式へ $test = json_decode($json, true); //配列にデコード |
コメント