- 1. よく間違えて書かれるトランザクション処理について
- 2. PHP declare(strict_types=1)ってなんだ!?
- 3. 【初心者PHP】この整数値は正、負、ゼロ?
- 4. date関数の使い方 現在日時の表現方法
- 5. TwitterのOAuth2.0認可をSocialiteで実装しようとしたら401が返ってきた
- 6. 【PHP】PHPのarray_mapのコールバック関数 ※多次元配列対応
- 7. PHP今日知ったこと
- 8. Livewireのhydrate、dehydrate完全に理解した。
- 9. PHPDocによる型情報の補足
- 10. 箱推しのためのYoutube予定表
- 11. PHPでオブジェクト指向を使ってブラックジャックを開発してみた
- 12. 【PHP9】ついに未定義プロパティが使えなくなる
- 13. 「なつかしの曲(ポータル)」サイトを改良しています。
- 14. Apacheの再起動でphp.iniの設定が反映されなかったとき
- 15. ワードプレスとStripe決済で決済完了後に会員権限を変える
- 16. OOP: interfaceについて
- 17. Laravelのベストプラクティスを読んでみた
- 18. 今まで読んだ技術書の中で汎用的で印象に残っているものをまとめてみる
- 19. CentOS7でLAMP環境構築 Linux, Apache, MariaDB(MySQL), PHP(Laravel / Composer)
- 20. PHPUnitで「General error: 1 no such table」エラーの解決
よく間違えて書かれるトランザクション処理について
## はじめに
自分が見てきたコードでよく間違えられて書かれるトランザクション処理をまとめました。
原因として多いのが、例外処理が正しく書けていないパターンです。## NG集
– #### ▼ NG例 ①
“`php
/** @var \Cake\Database\Connection $connection */
$connection = ConnectionManager::get(‘default’);
try {
// トランザクション開始
$connection->begin();
$this->Articles->save($saveData);
$connection->commit();
} catch (Exception $e) {
// キャッチされない
$connection->rollback();
echo $e->getMessage();
}
“`
– 〇 問題点
– save()では例外を投げないため、Exceptionでキャッチすることができない。
– #### ▼ N
PHP declare(strict_types=1)ってなんだ!?
# 概要
– PHPのコードにてファイルを作成したらnamespaseの宣言の前に呪文の様に`declare(strict_types=1);`と記載していた。詳しく意味を知りたかったのでまとめる。
# 調べてみた
– 公式ドキュメントでは下記の様に記載されている。
>declare 文は、あるコードブロックの中に 実行ディレクティブをセットするために使用します。declare の文法は他の制御構造と似ています。
– 簡単に言うとコンパイルするときの指示らしい
>ディレクティブ の箇所で、セットされた declareブロックの挙動を指定することが出来ます。 現在のところ、使用できるディレクティブは ticks ( ticksに関しては以下を参照ください)、 encoding (encoding に関しては以下を参照ください)、 strict_types (型宣言のページの 厳密な型付け も参照ください) です。
– 「strict_types (型宣言のページの 厳密な型付け も参照ください) 」と記載されているので下記のページを見てみる。
– [厳密な型付け](http
【初心者PHP】この整数値は正、負、ゼロ?
# コード
“`PHP
0){
echo ‘positive’;
} else if($m < 0){ echo 'negative'; } else if($m == 0){ echo 'zero'; } ?>“`
<ポイント>
☆intval() = 文字列(string)を整数(int)にする
☆is_int() = 整数か否か調べる★ = は「代入」、 == は「等しい」
date関数の使い方 現在日時の表現方法
1 date関数の使い方調査
—
公式マニュアルで調べると、説明がstringとか$formatで記されていて、使い方が理解できなかった。自分の知識経験不足が原因であり、このように記述する必要があることはすぐに理解した。理解を深めていくため、まずいろいろ動かし結果がどのようになるかを試した。
[公式マニュアルdate関数](https://www.php.net/manual/ja/function.date.php)2 date関数について
—
dateは日本語では日付だが、date関数は日付と時刻、更に曜日を表示できる。
現在日時と曜日も表現方法がいろいろ存在する。
今回はもっとも簡単な現在日時でまとめておく。3-1 コード 年月日 曜日 時分秒のアルファベット記号
—年月日 曜日 時分秒の順番で、年月日の間に’-‘、時分秒の間に’:’をつける場合のコードを代表例として記す。
~~~PHP: date1.php
TwitterのOAuth2.0認可をSocialiteで実装しようとしたら401が返ってきた
## {“code”:32,”message”:”Could not authenticate you.”}
Twitter の OAuth2.0 を用いた認可を Laravel の Socialite で実装しようとしたところ、出てきたエラーメッセージです。あなたが誰だか分からないって言われてますね。つまり、 Client ID などはちゃんと渡っているのにそれが符合しないというエラーだと思われます。
直感ではありましたが、これは OAuth1.0a で認可しようとしていて出ているエラーなのではと思いました。
じゃあ、ちゃんと OAuth2.0 を使うように指定しなければならないけれど、その方法が [Laravel 公式](https://laravel.com/docs/9.x/socialite)をみてもいまいち分からない。
なので、ソースコードを読みに行きました。具体的には[この辺](https://github.com/laravel/socialite/blob/5.x/src/SocialiteManager.php#L125)。“`php:SocialiteMa
【PHP】PHPのarray_mapのコールバック関数 ※多次元配列対応
“`PHP
‘太郎’, ‘age’ => 33],
[‘name’ => ‘洋子’, ‘age’ => 37],
[‘name’ => ‘美玖’, ‘age’ => 21],
[‘name’ => ‘信也’, ‘age’ => 15],
[‘name’ => ‘裕次郎’,’age’ => 45],
[‘name’ => ‘魁’, ‘age’ => 8],
[‘name’ => ‘達郎’, ‘age’ => 55],
[‘name’ => ‘真治’, ‘age’ => 29]
];
“`
### 全て2倍にする処理無名関数(クロージャ)
“`PHP
$value = array_map(function($num){
return $num[‘age’] * 2;
}, $people);var_dump($value);
“`
アロー関数
“`PHP
$value = array_map(fn ($var) => $var
PHP今日知ったこと
# DockerDesktop
DockerDesktopをインストールした.
wsl(Windows SubSystem for Linux)でやれとのことだった。PCにはUbutuを入れていて、Ubuntuはwslなのでいけると思ったが、ubuntuのバージョンが1で、1だとDockerDesktopが動かないらしくてバージョンを2に上げた。
Dockerはイメージからコンテナを構成するらしい。
そしてDockerDesktopはコンテナ、Image、Volume(記憶領域のことらしい)の削除とかはguiでできるらしいが、コンテナの中身はCLIで確認操作する。(のであまり意味を感じなかった。)docker内にphpUnitをインストールした。
### 型変換
strじゃなくてstring.
“` php:cast.php
return (string)$i;
“`
と書けばstringになる。### 表示文
var_dumpでcliに文を表示できる。
勉強元
https://online.dhw.co.jp/kuritama/function-tools-be-use
Livewireのhydrate、dehydrate完全に理解した。
# 事の発端
https://readouble.com/livewire/2.x/ja/lifecycle-hooks.html

**hydrate**と**dehydrate**って何だよ。
解説しているブログとか記事が無い。調べてみるか
## 前提
>livewireは、コンポーネント内のイベントが発火する度に、バックエンドで生成したHTMLをView側で受け取り差し替えています。
バックエンド側ではHTMLを渡すと同時にコンポーネント内のプロパティをオブジェクトに変換して渡しています。# 先に結論
要約すると多分こうです。| フック | 説明 |
| ———— |
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
//DB情報 $dsn='mysql:host=ホスト名;dbname=データベース名;charset=utf8'; $user='ユーザー名'; $password='パスワード'; //ログインユーザー情報取得 $userinfo = wp_get_current_user(); $user_id = $userinfo->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 #StandWithUkraineError 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)関連する記事
OTHERカテゴリの最新記事
-
- 2023.09.29
iOS関連のことを調べてみた2023年09月29日
-
- 2023.09.29
Ruby関連のことを調べてみた2023年09月29日
-
- 2023.09.29
Python関連のことを調べてみた2023年09月29日
-
- 2023.09.29
Rails関連のことを調べてみた2023年09月29日
-
- 2023.09.29
Python3関連のことを調べてみた2023年09月29日
-
- 2023.09.29
PHP関連のことを調べてみた2023年09月29日