【PHP技術者認定試験問題】組み込み関数 オブジェクト指向構文

組み込み関数 33
・count関数
・fopen関数fclose関数
・unset関数
・is_xxxxx関数データ型を判定

ファイルシステム関数

ファイルシステム関数とはファイルの操作(情報の取得、読み書き)をするための関数です。

fopen

ファイルに書き込みする場合、まずファイルを「開く」必要があり、fopen関数を使います。

fopen($filename, $mode)

$filename:ファイルのパス
$mode:オープンモード
戻り値:成功時→ファイルポインタ、失敗時→false
モード内容
r読み込み専用
r+読み込み、書き込み可
w書き込み専用(ファイルの内容を上書き)
w+読み込み、書き込み可(ファイルの内容を上書き)
a書き込み専用(ファイルの内容を追記)
a+読み込み、書き込み可(ファイルの内容を追記)

fclose

ファイルの操作が完了したら、fclose関数でファイルのクローズをします。

fclose($handle);

$handle:ファイルポインタ

fwrite

ファイルに書き込みをするとき、fwrite関数を使います。

fwrite($handle, $string[, $length]);

$handle:ファイルポインタ
$string:書き込む文字列
$length:文字列の長さ

flock

ファイルの同時書き込みが行われないよう、あらかじめflock関数でファイルのロックをします。

flock($handle, $operation);

$handle:ファイルポインタ
$operation:ロックモード
文字列の長さを取得する(マルチバイト文字対応)

mb_strlen関数

大文字と小文字を区別せずに文字列を一致する場合1を返す関数

strcasecmp()

アルファベットの順で1番目の引数が2番目の引数より大きい場合は正の数、等しい場合は0、小さい場合は負の数を返す関数

strcmp()

数字場合一文字目比較

・文字列を大文字小文字で変換する関数は
・変換モードは 4

mb_convert_case関数

MB_CASE_UPPER小文字→大文字
MB_CASE_LOWER大文字→小文字
MB_CASE_TITLE先頭文字を大文字に変換
MB_CASE_○○_SIMPLE文字列長が変化しない変換
部分文字列を取得する 2

mb_substr関数 文字位置で指定

$str = 'PHPプログラミング'
print mb_substr($str, 3, 4);

//結果 プログラ

mb_strstr関数 特定の文字列が見つかった場所を起点に取得

文字列を置換する

str_replace関数

文字列を特定の区切り文字で分割する(基本配列に格納)

explode関数

print_r(explode("\t", $data))
// テキストをタブで分割
特定の文字位置を検索する 2

mb_strpos関数 最初の位置を返す

mb_strrpos関数 最後に現れた位置を返す

部分文字列の登場回数をカウントする

mb_substr_count関数

文字列に特定の文字列が含まれるか判定 関数 3

str_contains関数

str_starts_with関数 先頭に位置する

str_ends_with関数 末尾に位置する

if (str_contains('Hallo World', 'Hallo')) {
  echo 'Halloはふくまれています';
} else {
  echo 'Halloはふくまれていません';
}
// (true/falseを返します) 結果 Halloはふくまれています
空白を除去する関数

trim関数

ltrim関数 左

rtrim関数 右

文字列「○○の気温は○○℃でです。」に「東京」「32.468」という数字を埋め込んでください
※数値は小数点以下1桁まで表示

printf(‘%の気温は%.1f℃です。’, ‘東京’, 32.468);

f:引数を浮動小数点で表現

文字列を変換する関数

mb_convert_kana関数

r全角英文字 → 半角英文字
R半角英文字 → 全角英文字
n全角数字 → 半角数字
N半角数字 → 全角数字
a全角英数字 → 半角英数字
A半角英数字 → 全角英数字
s全角スペース → 半角スペース
S半角スペース → 全角スペース
k全角カタカナ → 半角カタカナ
K半角カタカナ → 全角カタカナ
V濁点付きの文字を1文字に変換
$str = 'サーバサイド';
print mb_convert_kana($str, 'KV');

//結果 サーバサイド
文字エンコーディングを変換する関数

mb_convert_encoding関数

メールを送信する関数

mb_send_mail関数

配列の要素数を取得する関数

count関数

配列の内容を連結する関数

array_merge関数

$ary1 = [1, 3, 5];
$ary2 = [2, 4, 6];
$result = array_merge($ary, $ary2);
print_r($result);
// 結果:Array([0]=>1 [1]=>3 [2]=>5 [3]=>2 [4]=>4 [5]=>6)
配列の各要素を結合する

implode関数

配列の先頭、末尾に要素を追加、削除する関数 4

array_push 末尾に追加

array_pop 末尾から除去

array_unshift 先頭に追加

array_shift 先頭から除去

配列に複数要素を追加、置換、削除する関数

array_splice関数

// array splice(操作対象の配列, 削除箇所, 取り出す要素数, 挿入する値(配列)) 
array_splice($data1, 1, 0, 20)
配列から特定範囲の要素を取得する関数

array_slice関数

array_slice(操作する配列, 開始位置, 取り出す要素数, );

・配列の内容を検索する関数
・配列に特定の要素が存在するか確認する関数
  • array_search関数
  • in_array関数
$data = ['PHP', 'Java', 'PHP']
var_dump(array_search('PHP', $data));
結果int(0) ※最初の位置だけ返します
配列の内容を並べ替える関数

sort関数

配列の内容を順に処理する

array_walk関数

配列内の要素を加工する

array_map関数

配列の内容を特定の条件で絞り込む

array_filter関数

配列内の要素を順に処理してまとめる

array_reduce関数

・正規表現で$str = 住所は〒 123を-4567 ○○町0-0-0です。から郵便番号を取り出す
・すべてを取得する
if (preg_match('/[0-9]{3}-[0-9]{4}/', $str, $data)) {
  print $data[0]
}
  • preg_match_all関数
正規表現で文字列を置換する

preg_replace関数

正規表現で文字列を分割する

preg_split関数

アクセスログをカンマ区切りテキストでで保存するためにスクリプトを完成させてください。
<?php
$data 1 = data(‘Y/m/d H:i:s’);
$data 1 = $_SERVER[‘SCRIPT_NAME’];
$data 1 = $_SERVER[‘HTTP_USER_AGENT’];
$file = 2 (‘access.csv’, ‘3‘) 4 (‘ファイルを開けませんでした’);
5($file, LOCK_EX);
6($file, 7(“8“, $data) . 9);
5($file, LOCK_UN);
10($file);
<?php
$data [] = data('Y/m/d H:i:s');
$data [] = $_SERVER['SCRIPT_NAME'];
$data [] = $_SERVER['HTTP_USER_AGENT'];
$file  = fopen ('access.csv', 'a') or die('ファイルを開けませんでした');
flock($file, LOCK_EX);
fwrite($file, implode(",", $data) . "\n");
flock($file, LOCK_UN);
fclose($file);
curlハンドルをもとにリクエスト情報を返す関数は

curl_getinfo()

$info = curl_getinfo($ch);
var_dump($info);

オブジェクト指向構文 33
・例外処理マルチキャッチ
・名前空間インポート

デストラクターとは
  • コンストラクターとは逆に、オブジェクトが破棄されるタイミングで実行されます。
  • __destruct()
静的メソッドとは 4

静的メソッドはクラス自体で保持しているメソッドです。
インスタンス化しなくても利用できます。
$thisをつかうことができません。
クラス名::静的メソッド名()

$this
  • クラス定義のときに、クラス内のプロパティやメソッドにアクセスしたい場合に使用
  • インスタンス化したものを参照?
コンストラクタとは 2

オブジェクトがインスタンス化されるときに自動的に呼び出されるメソッドです。
__constructで定義されます。

コンストラクターの省略構文(PHP8以降)で
name(string型)、price(int型)プロパティをもつMenuクラスを定義してください
<?php
class Menu {
  public function __construct(
    public string $name,
    public int $price
  ) {}
}
引数底辺$width、高さ$heightから四角形の面積を求めるメソッドsquareを定義してください
(静的メソッド、クラス名はTestClass)
<?php
class TestClass {
  public static function square(float $width, float $height): float {
    return $width * $height;
  }
}
サブクラスを定義してください
class サブクラス名 extends スーパークラス名 {
  …メソッド/プロパティなどの定義…
}
PHPでは複数のクラスを親に持つような継承(1)を認めているか…2
  1. 多重継承
  2. 認めていない→単一継承
クラス定数を呼び出す場合

::

サブクラスでスーパークラスのコンストラクターを呼び出しでのキーワード

parent::__construct()

・1 メソッドのオーバーライド禁止
・2 クラスレベルで定義
  1. public final function メソッド名 : void
  2. final class サブクラス名 exends スーパークラス名
・自身が機能を持たないメソッドとは
・またそれを含むクラスは
  • 抽象メソッド
  • 抽象クラス
抽象メソッドを定義してください
<?php
abstract class 抽象クラス名
  アクセス修飾子 abstract function メソッド名: 戻り値のデータ型;
インターフェイスとは

配下のメソッドがすべて抽象メソッドであるクラス

※オーバーライドされる前提のメソッド

インターフェイスとクラスの違い 4
  • 配置できるのは抽象メソッドの(中身を持つメソッド、プロパティは×)
  • abstract修飾子不要(明らかに抽象メソッドのため)
  • アクセス修飾子指定不可、(普通割愛するがpublicは可)
  • 規則ではないが、IFigure、FigureInterfaceのように接頭辞/接尾辞を指定
・インターフェイスの定義
・実装クラスでの実装
interface インターフェイス名 {
  抽象メソッド、定数の定義
}
class 実装クラス名 implements インターフェイス名 {
  クラスの本体
}
・トレイトを定義してください(トレイト名1、トレイト名2)
・トレイトを利用してください
trait トレイト名 {
  …プロパティ、メソッドの定義…
}
use トレイト名

コードを再利用、多重継承と同様なことができます。

trait トレイト名1{
	処理
}

trait トレイト名2{
	処理
}

class クラス名{
	use トレイト名1, トレイト名2
}
try~catch~finally命令の記述
try {
  // 例外が発生するかもしれないコード 
} catch(発生するかもしれない例外の種類 例外を受け取る変数名) {
  // 例外発生時の処理 
} finally { 
  // 例外の有無にかかわらず実行する処理 }
例外のマルチキャッチの記述
いずれかに合致した場合に捕捉処理
try {
  // 任意 
} catch(HogeException | FooException | BarException $e) {
  // 例外発生時の処理 
} 
throw命令の記述
<?php 
try { 
  //throw new 例外クラス名(引数)でインスタンスを作成 
throw new Exception('例外処理発生'); 
} catch(Exception $e) { 
  //getMessageで例外メッセージを取得
  echo $e->getMessage(); 
} 
?>
throw式とは

PHP8以降でthrowは式として利用できます

$i = -10;
print $i > 0 ? $i : throw new Exception('$iは正数でなければならない');
未定義のインスタンスメソッド/静的メソッドが呼び出されたタイミングで実行されるメソッド

__call

__callStatic

名前空間を定義してください

namespace 名前空間名をファイルの先頭で定義

ファイルの読み込みから名前空間のインポート
require_once 'ファイル名';
use 名前空間名;
・require_onceを使わず呼び出された際対応するクラスファイルをインクルードするようにする仕組みの設定
・ずべてのふぁいる

オートローダー spl_autoload_register関数

・require_onceを使わず外部ファイルのインクルードをまとめて設定する
・任意のファルダーに適用
  • php.ini
  • .htaccess