PHP関連のことを調べてみた2022年04月07日

PHP関連のことを調べてみた2022年04月07日

PHPの引数、関数(初学者向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 関数
“`関数“`とは英語で“`function(機能)“`と言います。
書き方は

元記事を表示

WordPressのテーマをコーディング標準チェックできるようにする(phpcs)

# はじめに

WordPress でもコーディング標準チェックを行いたい!と思ったので、導入することにしました
~~本当は 1週間後の IPA の応用情報技術者試験の勉強から逃げたくなったからですが~~

# バージョン

| | バージョン |
| ————– | ———– |
| docker desktop | 4.6.1 |
| Windows 11 Pro | 22H2 |
| Ubuntu | 20.04.4 LTS |
| PHP | 8.0.11 |
| WordPress | 5.8.1 |

# 前提

以下の記事の続きです

https://qiita.com/rowpure/items/cc71c6885979bc592251

環境は Docker + NGINX + WSL2 とします
今回紹介するソースは、以下のリポジトリにあります

https://github.com/q23isl

元記事を表示

【Laravelエラー】Failed to open the referenced table

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況
“`php artisan migrate“`実行したときに下記のエラー。

“`
Failed to open the referenced table ‘users’ (SQL: alter table `posts` add constraint `posts_user_id_foreign` foreign key (`user_id`) references `users` (`id`))
“`

## 原因
外部キーを設定しているmigrationファイルがあるときに、「“`posts“`テーブルが“`user_id“`を持っている状態で、“`users“`テーブルを参照したいけどできない」というエラー。
migrationファイルを生成したときの日付が“`users“`テーブルより“`posts“`テーブルが先になってしまっていた。

## 解決法
migrationファイルの日付を親ファイルが子ファイルより先になるように修正する。

元記事を表示

PHP トレイト

# 概要
コードを再利用するための仕組み。

# 例
## 定義
“`php
trait Move {
function fowerd() {
// 処理
}

function backwerd() {
// 処理
}
}
“`

## 使用
“`php
class Human extends Animal {
use Move;

public function walk() {
$this->fowerd();
}
}
“`

# 詳細
トレイトは単一継承の制約を減らすために作られたもの。
メソッド群を異なるクラス階層にある独立したクラスで再利用できるようにする。
**多重継承**や**mixin**にありがちな問題の回避ができる。

クラスに似ているが、トレイトは単に機能をまとめるだけもの。
**インスタンスを作成することはできない**。

トレイトを活用すれば、継承しなくてもクラスのメンバーに汎用メソッドを追加できるようになる。

# 参考
[PHP: トレイト](https://www.php.net/manua

元記事を表示

PHPで連続して出現してくる文字列を成敗する方法

# 正規表現??とか意味わからん
やりたいこととして、連続して出現してしまう文字列を一つに統一したかった。
↓みたいなやつを….
“`
$fuck = ‘test1,,,test2,,,,,test3,,test4,test5,,test6’;
“`
こうしたい
“`
$fuck = ‘test1,test2,test3,test4,test5,test6’;
“`
preg_replaceってやつを使ったらいけた。
[preg_replace](https://www.php.net/manual/ja/function.preg-replace.php)
読んでみたけどなんか難しいことばっかり書いてあるで
なんとか喰らいついて書いてみた

“`
$fuck = preg_replace(‘|,+|’, ‘,’, ‘test1,,,test2,,,,,test3,,test4,test5,,test6’);
“`

こんな感じでやればカンマ区切りで配列にできたのでうれしい。

“`
$fuck = explode(‘,’, preg_replace(‘|,+|’,

元記事を表示

PHP 任意の文字、文字数でランダムな文字列を生成する

## コード

“`php:random.php

元記事を表示

ブログ編集画面での画像表示

# 目次
[1.元の記事にサムネイルがあるかどうかで分岐する](#1-元の記事にサムネイルがあるかどうかで分岐する)
[2.条件付きレンダリング](#2-条件付きレンダリング)
[3.削除後の動き](#3-削除後の動き)

Laravel + Vue.js を使ったブログ開発で、
**ブログ編集画面に編集前記事のサムネイルを表示させる機能**を作ったのでアウトプットとして記事を書いてみました。

編集画面で、やっぱりサムネイルを別の画像に変更したい!という時ってありますよね!
**編集画面に画像を表示させ、削除して別の画像に変更する**という機能を付けてみました。

# 1. 元の記事にサムネイルがあるかどうかで分岐する

まずは元の記事にサムネイルがあるかどうかで条件分岐します。
**サムネイルがないのに、サムネイル変更ボタンがあったら不自然ですよね**

というわけで、
**サムネイルが無い場合 -> サムネイル選択ボタン**
**サムネイルがある場合 -> サムネイル表示 & サムネイル変更ボタン**
という仕組みにしていきます!

# 2. 条件付きレンダリング

Vue を使

元記事を表示

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicudata.69.dylib で動かなくなったmacのPHPを救出した

もともと[個人ブログ](https://blog.from-garage.com)に書いてた記事ですが、一問一答系の内容なのでQiitaに逆輸入。

## PHPがバージョンすら返してくれないんだが

普段の業務や個人開発ではもっぱらdockerを使っていて、PCに直に入っているPHPとかはあまり触ることがありませんでした。
一方で、当方vimを使っていて、たまに単純なコードを確認するのに[quickrun](https://github.com/thinca/vim-quickrun)を利用しています。
vimはdocker内で起動しているのではなくてホスト側から起動しているので、quickrunをするとホストのPHPが使用されます。

今回もなんの気なしに新規バッファにコードを貼り付けて`:Quickrun`を実行しました。
すると

“`bash
dyld[77982]: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.69.dylib
Referenced from: /usr/local/Cellar/php/

元記事を表示

PHPの繰り返し処理(初学者の方向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 繰り返し処理
繰り返し何度も処理がされる処理のことです。

## for文
繰り返し処理の代

元記事を表示

Laravelのログをstderrからdocker logsに出力する

# 概要
Dockerコンテナ上で動作しているLaravelのログを`docker logs`コマンドで表示させる場合の設定

# docker logs
[dockerドキュメント](http://docs.docker.jp/v19.03/engine/reference/commandline/logs.html)によると、
標準出力`STDOUT`と標準エラー出力`STDERR`にログを出すことで
docker logsにログが出てきそう。

# ロギングドライバ
Dockerにはログを外部のログ記録ソフトウェアに転送する機構が用意されている。

`docker logs`コマンドで確認できる内容は`/var/lib/docker/containers/<コンテナID>/<コンテナID>-json.log`というファイルにJSON形式で記録されている。
このJSONファイル内には`STDOUT` `STDERR`の情報も記録されている。

# 記述
config/logging.phpの`stack`の`channels`に「stderr」を記述することで、
標準エラー出力にL

元記事を表示

phpインストールと、composerを使用してphpunitをインストールする

(自身の備忘録用です)
※OSはLinux

### phpをインストール
“`
yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install –enablerepo=remi,remi-php70 php php-devel libzip-devel php-mbstring php-pdo php-gd php-xml

# バージョン確認
php –version
“`

### comporserをインストール
“`
# インストーラーを取得
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php composer-setup.php
# PATHが通ってる場所へ移動
sudo mv composer.phar /usr/local/bin/composer

# 実行確認
composer
# 実行問題なければインストー

元記事を表示

CakePHP4 ORM “FROM サブクエリ”

## 環境

PHP 8.1.4RC1
CakePHP 4.3.6

## CakePHP4 の ORM で “FROM サブクエリ” を作る

やりたいこと

“`sql
SELECT base.id
FROM (SELECT h.id FROM hoges h) base
LEFT JOIN moges m ON base.id = m.id
“`

をORMで生成する。

次のコードは最初に書いたもの。

“`php:\App\Model\Table\HogeTable
public function getData()
{
// SELECT h.id FROM hoge h をつくる
$this->setAlias(‘h’);
$subquery = $this->find()->select(‘h.id’);

// サブクエリをFROMに指定する
$this->belongsTo(‘m’, [
‘className’ => ‘Moge’,
‘bindingKey’ => [‘id’],

元記事を表示

PHPで有効数字6桁で収まらない小数を指数表記を使わない文字列に変換するには?

PHPでは整数部が0で、小数第5位以降に初めて0でない数が現れる小数を`(string)0.00001`などで変換すると`1.0E-5`のように指数表記が使われる表現の文字列になる。

有効数字6桁で正確に表現できる小数(C言語とかでいう`float`で表せる数。例:`0.125`)であれば、`rtrim(sprintf(“%f”, $val), 0)`とすれば指数表記を使わない表現の文字列に変換できる。
しかし[sprintfのページにもあるように](https://www.php.net/manual/ja/function.sprintf.php)、小数点の後に表示する桁数はデフォルトで6桁である。これだと、**実際に格納されている値は大抵のプラットフォームでは有効数字14桁ほどの表現力がある倍精度浮動小数点数として格納されているにもかかわらず**、単精度浮動小数点数の範囲で正確に表せない小数では6桁までで打ち切られてしまい丸め誤差が発生してしまう。JSONテキスト内の値として使う場合などに問題になるだろう。

“`php
echo rtrim(sprintf(“%.14f”,

元記事を表示

Laravel 代行ログイン

プログラムでユーザーログインする場合以下でできる。
ただしIDを指定してしまえばどのアカウントにもログインできてしまうので権限チェックなどは必要。

“`php
//セッションIDの再発行
session()->regenerate();

//ログイン
\Auth::loginUsingId($user_id);
“`

元記事を表示

CakePHP4のI18nでpoの代わりにymlを使う

## 環境

PHP
CakePHP 4.3.6

## 目的

[国際化と地域化](https://book.cakephp.org/4/ja/core-libraries/internationalization-and-localization.html) が目的。
CakePHP4のデフォルトでは.poファイルを使うわけですが、個人的には見づらい。
というわけで.yml(.yaml)ファイルを使用したい。

## 準備

[国際化と地域化](https://book.cakephp.org/4/ja/core-libraries/internationalization-and-localization.html) にもあるように、“`YamlFileParser“`を作ればいい。

“`php:\src\I18n\Parser\YamlFileParser.php
namespace App\I18n\Parser;

class YamlFileParser
{
public function parse($file)
{
retur

元記事を表示

【備忘録】PHP継承について

## 継承とは
あるクラスで定義したプロパティやメソッドを、他のクラスに引き継ぐこと。

継承されるクラスを「親クラス(スーパークラス)」、継承するクラスを「子クラス(サブクラス)」と言う。

## 継承の方法
“`
class 子クラス名 extends 親クラス { }
“`

## サンプルコード
“`
name = $name;
}

//名前を返す
public function getName() {
return $this->name;
}

// 名前を表示する
public function introduce() {
echo $this->getName();
}
}

// オブジェクトを生成・初期化
$human = new Human(“tanaka”);

// メソッドの実行
$h

元記事を表示

macOS MontereyでPHPとApache

macOS MontereyではPHPが標準バンドルされなくなってしまいました。
なので、インストール…したところApacheも手入れしなければいけなかったのでメモ書き。

# 1.Homebrewのインストール
まっさらのOSの場合を想定してまずはHomebrewをインストールします。
Homebrewのサイトでインストールするためのコマンドをコピーできます。
“`
$/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

# 2.PHPをインストール
Homebrewのインストールが完了したら、引き続きPHPをインストールします。
入っていない筈ですが、一応PHPのバージョンチェックのコマンド。
“`
$php -v
“`
Command not foundが表示されると思います。
(もし自前で既にPHPを入れていた場合は現行のバージョンが表示されます)

インストールできるphpパッケージを確認します
“`
$brew se

元記事を表示

Laravel キュー

# 概要
通常のWebリクエスト中に実行するのでは時間がかかり過ぎるタスクがある場合、
バックグラウンドで処理したい仕事を**キュー**へ投入する。

(キュー:逐次入出力が繰り返されるデータを一時的に蓄えておくためのデータ構造)

Laravelはそれ用のジョブクラスが作成できる。

# ジョブ作成
全てのキュー用ジョブは `app/Jobs` ディレクトリ配下に配置する。

“`
php artisan make:job HogeProcess
“`

で生成されたクラスは `Iluminate\Contracts\Queue\ShouldQueue` インターフェース を実装する。

# クラス構造
`handle` メソッドのみを持つ。
これはジョブがキューにより処理される際に呼び出される。

`handle`メソッドでは依存関係をタイプヒント(型宣言)できる。

“`php
namespace App\Jobs;

use Illuminate\Contracts\Queue\ShouldQueue;

class HogeProcess implements Shou

元記事を表示

【Laravel】timestamps()とtimestamp()の違い

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## timestamps()
“`created_at“`および“`updated_at“`TIMESTAMPカラムを作成。

“`php
$table->timestamps();
“`

## timestamp()
“`created_at“`および“`updated_at“`**以外**のカラム名でTIMESTAMPカラムを作成したいとき使える。

“`php
$table->timestamp(‘expired_at’);
“`

## よくありそうなミス
この2つの違いを知らずに、下記のようにしていてmigrationできなかったので教訓にしたい。

“`php
$table->timestamps(‘expired_at’);
“`

元記事を表示

PHPの条件分岐(初学者の方向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 条件分岐
これは***もし〜なら〜で処理する***みたいな仮定法みたいなイメージです。
we

元記事を表示

OTHERカテゴリの最新記事