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

PHP関連のことを調べてみた2022年08月27日
目次

オリジナルのyoutubeページを作成してみました

# 概要
[「なつかしの曲(ポータル)」](https://tecoyan.blogspot.com/2020/05/0.html#btn_cntrl)は、[youtubeページ](https://www.youtube.com/watch?v=bFQyYwWV58M&t=106s)のオリジナルページです。
特長としては、国内、海外の昔なつかしい歌や曲を再生リストにして再生することができます。
再生リストはGoogleブログとサーバーのデータベースに保存しています。
このサイトのブログ記事を開くと月日別の投稿記事で再生リストの再生が始まります。
また、リスト選択でデータベースの再生リストを選択して再生できます。
# ページ詳細
このページは、基本要素とオプション要素から構成されています。以下、順に追って説明いたします。

## (1) 基本要素
このページの基本要素は、プレーヤーと再生リストです。
ページを開くと再生リストの先頭から再生がスタートします。あとは、ほったらかしにしておくと連続してリストを再生します。
イージーリスニングサイトをイメージしています。

## (2) オプショ

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較

Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較

# Python

https://qiita.com/Morio/items/1e06e7ac768758af5ffe

# Ruby

https://qiita.com/sagawashu/items/0f08266d5f72229423d9

# PHP

https://qiita.com/Hashimoto-Noriaki/items/dfb76d440a64eccba95d

# Java

https://qiita.com/setonao/items/ebc341ddf6d95295c48e

# JavaScript

https://qiita.com/taiju_suzuki/items/e2bf11fcf1645623235f

# Perl

https://perlzemi.com/blog/20161023147731.html

元記事を表示

ホームページのバナーはバニラのjsよりslick.jsを使った方が早いかつ品質が良い話(1)

初めて記事を書いていみました。
外国人かつ日本語学科ではないので、日本語がグダグダかもしれませんが、大目に見ていただければ幸いです。
コメント、指摘などはご自由にどうぞ。
※この記事には前編と後編があります。slick.jsは後編にて紹介します。

本記事対象

本記事は本人のキャリア経験を踏まえ、下記の方を対象に想定し、作成いたしました。

  • Javascript初心者
  • フロントエンド初心者
  • 非IT系会社の社内SE、情報システム部
  • サイト保守会社との窓口担当者
  • ウェブサイトデザインに興味のある方

環境

会社の公式サイトが2013年にウェブサイト制作会社に依頼し、
多分値引きをしたか、フレームワークを使わず、バックエンドのPHPはバニラ、フロントエンドも全部バニラで開発されました。
PHPは「Template P

元記事を表示

PHP 基礎文法

## \

– HTMLの中にPHPを埋め込む
– ファイル内に複数記入可能

## echo

– 引数を結合して文字列を表示
– 改行文字がなければ当然改行されない

## 大文字と小文字の区別

– echo、if、whileなどPHPのキーワードや、ユーザー定義関数やクラス名:大文字だろうが小文字だろうがどっちでもいい
– ユーザー定義の変数名や定数名:文字が完全一致していなければ別物

## コメント /* ~ */,// ~

– // ~ :1行のみコメントアウト
– /* ~ */ :複数行コメントアウトできる。コードの途中に挟むのも可能。

## 空白と改行

無視される

## 数字が含まれてる文字列を使った計算

– 例: 2+”15″のように数値と数値文字列を足すと数値同士の計算に変換される
– 例:”250円”*2のように数値以外の文字があっても数値同士の計算、つまり250*2に変換される

## インクリメント

– 例:$b=++$a; の場合、加算(+1)→代入の順に処理される。つまり$bの値と$aの値は等しくなる

## ポストイン

元記事を表示

ユニットテスト導入のメリット・デメリットまとめ

# はじめに

株式会社ナイトレイの和田です。
普段、自社サービスの開発に取り組んでいます。
現在私が関わっているプロダクトにユニットテストを導入しました(そのプロダクトではユニットテストが省略されていました)。
その際に、改めてユニットテストのメリット・デメリットを学んだので、それをまとめたものをここに共有します。

# メリット

## ①バグによるダメージを減らせる

### 早期発見

一般的に、不具合が発生した時の改修コストは、発見が遅れるほどに上がっていく。

例えば、リリース前に見つかるのとリリース後に見つかるでは改修の影響範囲やユーザーへの対応含め大きな差がある。逆に言えばQA段階ならもっとコストが下がり、手元での動作確認時ならさらに下がり、コードレビュー段階ならさらに…

テストコードは開発段階で不具合を発見することに貢献してくれるため、改修コストが最小で済む。

### 原因特定

テストコードが書かれていれば、どこが壊れてどこが正常なのかという問題の切り分けができるので、問題箇所の特定がしやすくなる。結果的に不具合の解消を早めることができる。

### 減少

元記事を表示

Laravelのテスト時にDB内のデータを吹き飛ばさないために

# はじめに

株式会社ナイトレイの和田です。
普段、自社サービスの開発に取り組んでいます。
現在私が関わっているLaravelのプロダクトにPHPUnitテストを導入しました(そのプロダクトではユニットテストが省略されていました)。
その際に上記のタイトルに関する問題で少し悩んだので記事にして共有したいと思います。
前提として、この問題はテストDBを用いるテストに限ったものになります。

# 環境

Laravel 8.83.14
PHP 7.3.33
PHPUnit 9.5.20

# テスト時にDB内のデータが吹き飛んでしまうケース

以下の条件が揃った時に発生する。

– `config: cache`コマンドを打つなどして、設定ファイルがキャッシュされた状態でテストを実行
– 実行されるテストファイル内で`RefreshDatabase`などのテーブル、もしくはテーブル内のデータを一回削除するような処理が施されている場合

理由としては、**Laravelにおいて設定ファイルがキャッシュされた状態でテストを実行すると、phpunit.xml よりそのキャッシュが優先的に参照さ

元記事を表示

PHPUnitの公式ドキュメントを全部読んだので大事なところをまとめてみた

# はじめに

はじめまして株式会社ナイトレイの渡辺です。

現在私が関わっているプロダクトでPHPのユニットテストを導入した際、PHPUnitを利用するにあたって公式ドキュメントを一通り読んだので、この記事では個人的に重要な箇所を備忘録としてまとめます。

? 本記事で記載されている内容はこちらのドキュメントから引用させていただいております

https://phpunit.readthedocs.io/ja/latest/

## 対象読者

– 少しPHPUnitを使ったことがある
– PHPUnitをもっと上手く使いたい

## 環境

PHPUnit 9.5.20

# 内容

## ****PHPUnit 用のテストの書き方****

この章では、PHPUnit を使ったテストを書く際の基本的な決まり事や手順を紹介しています。

最低限、PHPUnitでテストを書く上で必要な情報なので一通り目を通すことを推奨します。

[https://phpunit.readthedocs.io/ja/latest/writing-tests-for-phpunit.html](

元記事を表示

PHP8.0からの便利な機能 ~3選~

PHP8.0の新機能でよく使う機能を3つ紹介します:point_up::v:

## 1. match式
簡単な条件分岐処理はmatch式を使いましょう!
### BEFORE:frowning2:
“` php:if文
$hoge = 1;
if ($hoge === 1) {
$fuga = ‘イチだよ’;
else if ($hoge === 2) {
$fuga = ‘ニだよ’;
else if ($hoge === 3) {
$fuga = ‘サンだよ’;
} else {
$fuga = ‘チガウヨ’;
}
“`
“` php:switch文
$hoge = 1;
switch ($hoge) {
case 1:
$fuga = ‘イチだよ’;
break;
case 2:
$fuga = ‘ニだよ’;
break;
case 3:
$fuga = ‘サンだよ’;
break;
default:

元記事を表示

XAMPPでMySQLのポート番号の変更方法

MySQLのConfigボタンをクリックし、my.iniをクリックする。
ポート番号を3306以外に変更する。
“`[client]
# password = your_password
#port=3306
port=3309 ← ここ
socket=”D:/xampp/mysql/mysql.sock”

# The MySQL server
default-character-set=utf8mb4
[mysqld]
#port=3306
port=3309 ← ここ
socket=”D:/xampp/mysql/mysql.sock”
“`
# 参考文献
https://itsakura.com/xampp-port

元記事を表示

PhpStormで使っているプラグイン

PhpStormで使ってるプラグイン一覧。
PHPに関係あるなし関わらず追加で入れてあるプラグインを全部。

## 開発全般
https://plugins.jetbrains.com/plugin/9333-makefile-language

makefileに実行ボタンが付いてポチッとな、ができるようになる。

https://plugins.jetbrains.com/plugin/9746-ideolog

各種ログファイルに色づけできる。
ログフォーマットをカスタムすることも可能。

https://plugins.jetbrains.com/plugin/9525–env-files-support

## PHP
https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-

これのおかげでPHPのプログラムの質が爆上げ。入れないと損する。
自分の昔のソースコードに手を入れるときに改善指摘が多すぎて泣く。

https://plugins.jetbrains

元記事を表示

.find()メソッドのメソッドチェーンは便利だった

# 概要
再生リストをDOMアクセスする場合、リストの構造がネスト構造になっていて複雑な場合、深いところにあるセレクターをチェックしたい場合、どうしたらいいか悩んでいたところ、find()メソッドが使えることに気がつきました。このfind()メソッドをメソッドチェーンでつなげて行くと簡単に深いところにある、セレクターをチェックできました。

# 事例
「なつかしの曲(ポータル)」サイトの王冠再生ボタンでそのテクニックを使用しました。

“`
//王冠を再生
//
var crown_list=[];
//王冠再生ボタンのクリックイベント処理
//
$(document).on(“click”,”#crown_play”,function (e){
crown_list = [];
//再生リストのタグを順にチェックして、class=”.goodness”
//要素の中に

元記事を表示

【ZipArchive】phpでディレクトリのファイルをzipで圧縮

# ディレクトリのファイルをzipで圧縮したい
phpでファイル圧縮をする場合はZipArchiveを使う場合があるのだが、ディレクトリ指定ができないので、ディレクトリ指定したい場合のやり方を書いておく

“`php
open(‘/path/to/put/zip/file/example.zip’, ZipArchive::CREATE);
$files = glob(“/path/to/files/*”);
foreach ($files as $file) {
$zip->addFile($file); // ファイル名を帰る場合は第2引数で指定可能
}
$zip->close();
“`

難しくないコードです。
glob関数でファイル一覧を持ってきて圧縮しているだけです。ディレクトリ指定そのままできると便利と思ったのですが、できないみたいなのでメモ程度に残しておきます。

元記事を表示

PHP シリアライズを使って配列をDBに保存可能な文字列に変換する

# 概要

– PHPのシリアライズ(保存可能な文字列型への変換)について簡単にまとめてみる。

# シリアライズの方法

### 文字列をシリアライズする

– シリアライズにはPHPの組み込み関数である`serialize()`関数を用いる。
– 手始めに文字列型の「A」という文字をシリアライズしてみる。

“`php

元記事を表示

【PHP】コンテクストによる型変換

今回はコンテクスト(文脈)による型変換の具体的な動作について確認していこうと思います。
PHPマニュアルによると、コンテクストによる型変換が起こる
可能性があるのは以下の6パターンとなっています。
それぞれの型変換について発生条件や仕様を見ていきます。

* 数値のコンテクスト
* 文字列のコンテクスト
* 論理コンテクスト
* 整数と文字列のコンテクスト
* 比較のコンテクスト
* 関数のコンテクスト

:::note info
[型の相互変換](https://www.php.net/manual/ja/language.types.type-juggling.php)
:::

## 数値のコンテクスト
算術演算子を使った場合に型変換が発生します。
以下の例では、var_dump の中で $b が
**boolean true -> int 1** に変換されてから演算されています。

“`php
$a = ‘5’;
$b = true;
var_dump($a + $b); // int 6
“`

:::note warn
マニュアルにも「注意」とありますが、値を別

元記事を表示

PHPのインスタンス変数の中にオブジェクトは入ってない

# 概要

– 忘れないようにインスタンス変数の内容について簡単にまとめる。

# インスタンス変数の中にオブジェクトは入ってない

– [オブジェクトと参照](https://www.php.net/manual/ja/language.oop5.references.php)を読んでいたら下記のような内容が書いてあった。

:::note info
PHP では、オブジェクト変数の値にオブジェクト自身は含まれません。
含まれるのはオブジェクトの ID のみで、 これを用いて実際のオブジェクトにアクセスできるようになっています。
:::

– ようはオブジェクト変数にはオブジェクトそのものは格納されていない。
– 別の領域に作られたオブジェクトのIDだけがオブジェクト変数に格納されているようだ。

元記事を表示

PHP オブジェクトと参照を読んでみた

# 概要

– PHPのマニュアルの[オブジェクトと参照](https://www.php.net/manual/ja/language.oop5.references.php)を読んでみたので自分なりにまとめてみる。

# 今の自分の知識量

– オブジェクトは参照渡しとはちょっと違うけど似たような振る舞いをすることは知っている。

# 内容

– 「オブジェクトはデフォルトで参照渡しになります!」とよく言われるけど、厳密に言うと少し違うらしい。
– オブジェクト変数の値にオブジェクトそのものは格納されない。格納されているのはオブジェクトのIDのみ。
– PHPではオブジェクトのIDを用いてオブジェクトにアクセスできるようになっている。
– だからオブジェクト変数を他の変数に更に格納したりしてもオブジェクトのIDが他の変数に格納されるだけなのでオブジェクトIDを用いてオブジェクトを参照すると同じオブジェクトを参照する。
– なのでインスタンス変数の値を他の変数に格納してもオブジェクトID値がコピーされる。結果として同じオブジェクトを指すようになっているだけ。
– 参照渡し:参照先情報

元記事を表示

過去の自分のコードを修正してみる – PHP カレンダー編③

# 前回までのまとめ
これを

“`php

\n

\n

\n

“;
$t++;
} elseif (($t == 1) or ($t == 2)) {
print “

“;
$t++;
} else {
print “

“;
$t = 0; //次の段へ
}

“`

こうした

“`php

if ($t === 0) :
?>

PHPをVSCodeで実行できない

前提
Xammpはインストール済み
xammpフォルダ内のhtdocsフォルダ下にtestフォルダを作成。そのなかにtest.phpファイルを作成

実行したこと
ブラウザにて、http://localhost/test/test.phpを入力して、実行

結果
404 not found

エラー解消のためにやったこと
キャッシュの削除
chrome://net-internals/#hstsにアクセスして、Delete domain security policiesの項目からlocalhost またはlocalhost:8888と入力してDeleteを実行
・・・この操作はlocalhostでのアクセス時、httpが自動でhttps(httpをSSLでアクセスするもの)に変換されていることがあるためそれを削除した。
=>test.phpは開けるようになったが、localhostのURLが開けない。というかlocalhost入力時、後ろに/tutorialが付与され、リダイレクトしてしまう。



結果わかったこと
おそらくDockerが原因でした。PHPの環境構築前に試しに

log_errors を off としているのに、 PHP のエラー出力が行われる