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

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

Livewireのhydrate、dehydrate完全に理解した。

# 事の発端

https://readouble.com/livewire/2.x/ja/lifecycle-hooks.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282328/95f1be8a-e506-09a0-5d0f-cc72ae9fefc5.png)

**hydrate**と**dehydrate**って何だよ。

解説しているブログとか記事が無い。調べてみるか

## 前提
>livewireは、コンポーネント内のイベントが発火する度に、バックエンドで生成したHTMLをView側で受け取り差し替えています。
バックエンド側ではHTMLを渡すと同時にコンポーネント内のプロパティをオブジェクトに変換して渡しています。

# サンプルコードとライフサイクル

https://laravel-livewire.com/docs/2.x/security#introduction

“`php
class Counter extends Component

元記事を表示

PHPDocによる型情報の補足

## PHPDocとは?
PHPDocとはコードに詳細な情報を記述することができる、特別な種類のコメント文です。

これを書くことで下記のメリットがあります。

– 型チェックされる。(予期しない値が渡されないか確認できる)
– IDEで補完が効きやすくなる。
– 静的解析がより正確に実行できる。(PHPStan 等)

## タグの説明
– **propaty**
各クラスでModelクラスや別クラスを呼びだしている場合に必要。
また、定義しないと未定義のプロパティとなり、アクセスできない。

– **param、return**
引数、戻り値の情報を記載するためのタグ。

– **var**
変数、オブジェクトのプロパティの情報を記述する。

– **method**
クラスのメソッドに関する情報を補足する。
マジックメソッドなどアクセス不可なものを保管する。
(例)findBy、findAllBy等

## サンプルコード
“`php:MainController.php
/**
* ○○デフォルトページ用のコントローラーのファイル
*
* @property \App

元記事を表示

箱推しのためのYoutube予定表

# 前置き
「あのVTuber事務所の配信スケジュール、一週間以上落ちてるんだよね」
「仕方ない、俺が作るか」
そんなノリで作ろうとしたら翌日には復旧した俺の気持ち。

# 要件
・YoutubeAPIのリクエストは日単位での回数制限があるため、一度取得した結果は保存しておく
・変更・削除に対応するため、再取得する際、前回の結果は削除する
・チャンネル数は20程度またはそれ以下を想定
・アクセス数もそんなに大量にない
・移行の容易性を考えデータはDBではなくファイルに保持
・ちゃんと配信予定(枠)を事前に作ってくれると効果大

# 作り方
## API keyの発行
今回はyoutube APIを使用しているのですが、使用にはAPI keyを発行する必要があります。
一日の使用回数に制限がありますが、googleアカウントがあれば無料で発行できます。
下記の記事に詳しい手順が記載してあります。
https://qiita.com/shinkai_/items/10a400c25de270cb02e4

## チャンネルの枠の一覧を取得
下記が公式リファレンスなのですが、ちょっと情報量と

元記事を表示

PHPでオブジェクト指向を使ってブラックジャックを開発してみた

# 概要
[独学エンジニア](https://dokugaku-engineer.com/ “独学エンジニア”) さんで課題となっていたブラックジャック作成に取り組みました。
[Git Hub](https://github.com/remioakiaki/Blackjack2 “Blackjack2”)にソース公開しております。

# ルール
“`
ブラックジャックはカジノで行われるカードゲームの一種です。
1〜13までの数が書かれたカード52枚を使ってゲームが行われます。
ルールは次の通りです。

・ 実行開始時、ディーラーとプレイヤー全員に2枚ずつカードが配られる。
・ 参加できるプレイヤーは3名(ディーラー含めて合計4名までとする)。
・ 自分のカードの合計値が21に近づくよう、カードを追加するか、追加しないかを決める
・ プレイヤーはカードの合計値が21を超えない限り、好きなだけカードを追加できる
・ ディーラーはカードの合計値が17を超えるまでカードを追加する

各カードの点数は次のように決まっています。
・ 2から9までは、書かれている数の通りの点数
・ 10,J,

元記事を表示

【PHP9】ついに未定義プロパティが使えなくなる

先日[PHP9で未定義変数が使えなくなる](https://qiita.com/rana_kualu/items/7f84fcea5c70248ac99e)ことが決まりましたが、それのプロパティ版です。

“`php
class HOGE{
public function __construct(){
$this->a = 1; // PHP8.2以降エラー
echo $this->b; // PHP9.0以降エラー
}
}
“`

このソースコード、PHP8.1まではE_WARNINGが出るものの動作はします。
しかしこのうち、未定義プロパティへの代入`$this->a=1`は[PHP8.2で禁止](https://qiita.com/rana_kualu/items/53012c8f84e0f92220c1)されました。
そしてPHP9では、未定義プロパティの取得`$this->b`が禁止されることとなります。

以下は該当のRFC、[Undefined Property Error Promotion](https://wiki.php.net/rf

元記事を表示

「なつかしの曲(ポータル)」サイトを改良しています。

# 概要
[site]: https://tecoyan.blogspot.com/#btn_cntrl
[store]: https://chrome.google.com/webstore/search/tecoyan?hl=ja
[youtube]:https://www.youtube.com/watch?v=aUYJZqZOX2s&t=1326s
このサイト([なつかしの曲][site])は、youtubeの動画を再生するGoogleブログサイトです。ページの中に、youtubeプレーヤーと再生リストを置いています。一つの投稿記事に一つの再生リストを割り当てています。日付毎に再生リストが割り当てあります。リストの選択はブログのアーカイブからも選択できますが、さらに、より簡単にリスト選択出るように目次を作成しています。作成当初は、投稿リストのみでしたが、その後に、リスト選択ボタンとスペシャルリストを追加しました。これについては、後述します。

# 特長
このブログサイト([なつかしの曲][site])の特長の一つは、サーチボタンです。このボタンで、[youtube][you

元記事を表示

Apacheの再起動でphp.iniの設定が反映されなかったとき

## Apacheの再起動
Webサーバへ反映するとき、
下記のコマンドを打っても反映されていないときがあります。
“`
$ service httpd restart
“`

## なぜphp.iniが反映されないか

Apacheでphpを実行するには**モジュール版**と**CGI版**のどちらかを使っています。

CGI版を使っている場合、**PHP-FPM**を通してphpを実行します。

Apacheを再起動しても**PHP-FPMがphp.iniの設定を読み込めない**のが原因です。

## CGI版
CGI版はPHP-FPMを通してphpを実行しています。
PHP-FPMに対して、php.iniの設定を読み込ませるため、下記コマンドを実行します。
“`
$ service php-fpm restart
“`

## モジュール版
Apacheが直接phpを実行しているためApacheの再起動だけで良いようです。

## FastCGIとは
Webサーバのプログラムを一度起動させて**しばらくメモリ上へ保持し待機させる仕組み**となっています。
なので、一度起動

元記事を表示

ワードプレスとStripe決済で決済完了後に会員権限を変える

ワードプレスで作った決済機能付き会員サイトで、決済後に会員ステータスを変更して権限レベルを上げるプログラムを考えました。

# 機能概要
・登録時は購読者で登録
・月額費用の決済が完了した会員の権限をアップして編集者や投稿者に

“`php
ID;//ログインしているユーザーIDを取得

try{
$pdo = new PDO($dsn,$user,$password,[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);//dbに接続する
$sql1 = “SELECT `umeta_id` FROM `wp_usermeta` WHERE (`user_id`= ? AND `meta_key`LIKE

元記事を表示

OOP: interfaceについて

# interface
interfaceはただ戻りと引数だけが定義された写像を書いてるだけで写像の具体的な演算は定義されていない。
そのクラスに定義された写像の一覧を作っておくことでクラスを分類できるようにする。
interfaceはClassではないのでそれ単体ではインスタンスを生成できない。interfaceを使うには、あとでクラスを作るときにinterfaceをクラスに取り込み、interfaceで定義された写像の中身の演算を定義しなければならない。

“` php:interface_ex.php
interface DataStrageAccessInterface
{
public function fetch($key);
public function save($key, $value);
}
class DbAccessor implements DataStrageAccessInterface
{
public function fetch($key)
{
return Database::fetch($key

元記事を表示

Laravelのベストプラクティスを読んでみた

# なぜベストプラクティスが必要なのか?

### Laravelの自由度が高すぎるから

Laravelは便利ですが、記述やディレクトリなどの自由度が高すぎてしまうという悩みどころがあります。
プロジェクトが進むにつれて、多くの人が自由にコードを書いてしまってすごく複雑になってしまう前に、コード記述の指針を示しておく必要があります。

### 初学者のために

巷にあふれているチュートリアルや本の通りに学習してしまうと、それに沿い過ぎた変な癖がついてしまう場合があります。
そこで、改めてベストプラクティスに目を通すことで、よりよいLaravelのコードを知ることができます。

# Laravelのベストプラクティスとは?

[公式(英語版)](https://laravel.com/docs/9.x)は、ベストプラクティスというよりも、Laravelによって提供される機能のHow Toって感じですよね。

そこで、[alexeymezenin氏](https://github.com/alexeymezenin)や有志によって作成されている[laravel-best-practice

元記事を表示

今まで読んだ技術書の中で汎用的で印象に残っているものをまとめてみる

30代半ばでWebエンジニアに転職者(≠転生者)のおぎです。
2020年のコロナ禍をきっかけに興味本位でWebプログラミングを学び始めたのが運の尽きで、あれよあれよという間に深みにハマり、気づけば30代半ば(妻子あり)で異業種から転職をし、今はPHPをメイン言語としてバックエンドのプログラムを書いたりしています。

転職してからは社内向けのアウトプットは多少していたのですが、インプットと実務で最近ほとんど外部向けへのアウトプットが行えていなかったので、リハビリがてら今まで読んだ本を覚えている範囲でリストしていこうと思います。(本当はもっと色々読んでいるんですが、難しすぎて理解できなかったり、他の本と内容が重複していたりで覚えていないものも多く、覚えていないものに関しては読んでいないのとほぼ同じだと思うので覚えている範囲のみで…)

※自分は基本的にPHPがメインではあるのですが、特定の技術や言語に関する技術書は時代とともに変化しやすい上、汎用性が低いので自費での書籍購入はなるべく汎用的なものを選ぶようにしています。

## オブジェクト指向でなぜつくるのか
https://www.

元記事を表示

CentOS7でLAMP環境構築 Linux, Apache, MariaDB(MySQL), PHP(Laravel / Composer)

CentOS7上での基本的なLAMP環境の構築方法の備忘録。

## 開発環境
Windows11
VirtualBox 6.1.14
CentOS 7.9.2009
Apache 2.4.6
MySQL 8.0.29
PHP 8.0.19
Laravel 9.12.2
Composer 2.3.5
Git 2.9.5

## 新規ユーザーの設定

ユーザー追加
`useradd [ユーザー名]`
“`
[root@localhost ~]# useradd sakamoto
“`
実行後に何も表示されませんが追加されています。

パスワード設定
`passwd [ユーザー名]`
“`
[root@localhost ~]# useradd sakamoto
Changing password for user sakamoto.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
“`

ユーザー設定
sudo をパスワードなしで使用できるように

元記事を表示

PHPUnitで「General error: 1 no such table」エラーの解決

# はじめに

ローカル環境で、CakePHP のプロジェクトに対して PHPUnit 実行コマンドを叩くと、「テーブルがないから DROP できない」エラーが発生しました。
2回 PHPUnit 実行コマンドを叩くと正常にテストを実行するため、都度都度 2回実行する運用をしていましたが、楽をしたいため解決させます。
テスト実行時の DB は SQLite を利用しています。

テスト実行時のエラーログ

“`bash
$ docker exec -it app ./vendor/bin/phpunit
PHPUnit 9.5.20 #StandWithUkraine

Error in bootstrap script: PDOException:
SQLSTATE[HY000]: General error: 1 no such table: files
#0 /var/www/html/vendor/cakephp/cakephp/src/Database/Driver/Sqlite.php(179)

元記事を表示

As a web engineer intern at ielove GROUP

# Summary
web開発インターン@いえらぶGroup
インターンを通して、実際のプロダクトの環境での開発から学びの記録です:)
**フロントエンドとバックエンド合計12個のプロジェクト**に取り組みました。

開発ページ:https://cloud.ielove.jp/
期間:2021.02-2021.09(7か月)
開発環境:JavaScript, PHP, Zend Framework, MySQL, HTML, CSS, Gitlab, phpstorm
![img_reason2_input.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714363/093411d2-cacd-5d62-e152-a87cfa021ae9.gif)

# 大規模なシステムでの開発
情報科学科でも授業で扱うものは基本的な理論であったり、演習問題も数個のファイルで完結するものが多いです。そこで規模というものが、実際のプロダクトとの違いの一つであり、着目してみました。
### 該当部分探しの旅
開発要件が決

元記事を表示

XSERVERにlaravelのwebアプリをgitからデプロイ

この作業が何回やっても慣れず、自分の備忘録的な意味も含めて書かせていただきました。
もしよければ参考にしてみてください。

## SSH接続
初期設定の部分は簡単なので飛ばします

ログインコマンドはこちらです
“`
ssh -l サーバーID -i ~/.ssh/サーバーID.key サーバーID.xsrv.jp -p 10022
“`

## PHPのバージョンアップ

#### 1 , 現在のバージョンを確認
LaravelにはPHPのバージョンが7以上であることを要求されています。
まずは以下のコマンドを実行してphpのバージョンを確認してみます。
“`
php -v
“`
laravel8.*を使うときはバージョンが7以上
laravel9.*を使うときはバージョンが8以上であれば、そのままでも大丈夫です。

#### 2 , バージョンアップ
では、実際にphpのバージョンを変更していきます。
まずはHOME直下にbinディレクトリを作成します。

“`
mkdir $HOME/bin
“`

下記コマンドを実行すると使えるバージョンが表示されます。
“`

元記事を表示

実務4年目のWEBエンジニアが「PHP本格入門(下)」を読んで学んだこと 12選

## はじめに

今回は「__実務4年目のWEBエンジニアが「PHP本格入門(下)」を読んで学んだこと 12選__」というテーマでお伝えします。

PHP本格入門(下)(以下、本書)

https://gihyo.jp/book/2020/978-4-297-11470-1

本書を手に取った経緯などは、下記記事をご参照ください!

https://qiita.com/Yazmatto/items/90f854e11a5b3cd88999

それでは、本題です。

ここからは、本書を読んで学んだこと 12選をお伝えしていきます。

## 結論

私が本書を読んで学んだことは、以下の通りです。

:::note
学んだこと 12選
1. クラスの関係性を表すキーワード
1. 神クラス(アンチパターン)
1. なんでもpublicなクラス(アンチパターン)
1. クラスに動的にアクセスする方法
1. イテレータを使用した繰り返し処理
1. ジェネレーター
1. メソッドチェーンに対応したクラスの作り方
1. HTMLおよびJavaScriptのコメントには注意する
1. セキュリティリス

元記事を表示

Generatorを使って配列をコンソールに出す処理を書く

## 概要

再帰的に配列を作成し返す関数とGeneratorを返す関数を書き、その違いを見比べてみます。

## 経緯

任意の配列をコンソールに出す処理を書いていました。
始めは直接ループ内で出力していましたが、非常にテストしづらいので、先に出力する文字列の配列を全部作成してから一気に出力しようと考えました。
そこで、大きい配列を出力するためだけに同じような(あるいは大きい)配列を作成し、メモリを使うのは勿体無いので、Generatorを使って書くに至りました。
恥ずかしながら、Generatorは今まで使った事が無かったのですが、ちゃんと書いてみると配列バージョンとGeneratorバージョンの書き方の対応がよく分かったので、メモがてら残そうと思った次第です。

## コード

### 配列を作成し返す場合のコード

“`php
/**
* 配列を表示するための文字列を取得する
*
* @param array $data
* @return array
*/
function getOutputStr_Array(array $data, int $de

元記事を表示

LaravelとMySQLの接続詰まったところ

# Laravel詰まったところ
## おそらく当たり前のことだけどわからなかったのでメモしておく
## php artisan migrationでのエラー
### .envで、DB_DATABASE=homestead, DB_USERNAME=homestead, DB_PASSWORD=passに設定したときやっておかなければならないこと。
### MySQLにログインする(各人で異なると思うが、私は[mysql -u root]でログインできたぁ)、そんでまずはhomesteadのデータベースを作成、次にhomesteadという名のユーザーをpassというパスワードで作成、最後にhomesteadユーザーにhomesteadデータベースの権限を付与する。
### 上記ができたら、[php artisan migration] を実行する。
### それでうまくいったら、mysqlにログインする。[mysql -u homestead -p] Enter passwordと出るので[pass]と入力する。
### MariaDB[none]> でるので[connect home

元記事を表示

【メモ】Laravelのオートロードの仕組みについて学ぶ

PHPを初めて触り、Laravelを勉強しているのですが、オートロードという機能を目にして便利だけどなんで機能しているのか全く分からない状態でした。
今回はそんなオートロードについてちゃんと調べました。
最初はLaravelがそういう機能を提供しているのかな?とか思っていたら、いやいや機能を実現するためにファイルを作ったのはComposerだよとなり、実際にComposerによって作成されたファイルを見てみたらPHPで記述されていて、更に見てみたらPHPの標準としてオートロード機能を実装するための関数が用意されていたという話です。

# Laravelにおけるオートロードとは
オートロードを実施しない場合、クラスをインスタンス化したりするときには、クラスが定義されているファイルをrequire等で読み込んでからインスタンス化をすると思います。
オートロードでは名前空間+クラス名と、そのクラスが実際に記述されているファイルとを紐づけます。そうすること、インスタンス化するときなどに名前空間が分かるように記述すればで自動でファイルを読み込んで使用できるようにしてくれます。
何がありがたいかと

元記事を表示

Symbol(XYM) の価格表示をする WordPress プラグイン

# まえがき

Symbol コミュニティは今、phpにつよいエンジニアを探しています!