- 1. if ($user[‘role’] === ‘admin’)←こういうのやめたいって話
- 2. PHPでの引数の渡し方によって、メモリの消費は異なる
- 3. PHPUnitの書き方
- 4. 独習PHP_第4版のアウトプット(第1章_PHPに必要な知識_中編)
- 5. 【Laravel】Pintで改行コードがLFになる問題の解消方法!
- 6. access.logをAthenaで分析できる環境を構築してみた話
- 7. 【PHP】 スーパーグローバル変数(定義済み変数)
- 8. PHP(動的型付け)・PHP(動的型付け+型指定)・Go(静的型付け)の比較
- 9. PATHの通っていない場所にインストールしたPHP向けの拡張モジュールコンパイル
- 10. 【PHP】Carbon使用する時に気をつけること
- 11. Laravelでテーブルのカラムを変更するための方法
- 12. WordPressで各ページのh1に任意の画像を設定する方法
- 13. PHPStanのエラー箇所へ1クリックで飛べるようにする設定
- 14. VSCodeの型ヒント表示を無効化する
- 15. Strategies to Improve Your Design Skill
- 16. Laravel ORM(Eloquent)チートシート
- 17. 171日目 Laravel(PHP)でマイグレーションファイルを使いこなそう! by社畜♀
- 18. 【Laravel】X-Forwarded-ForからIPアドレスを取得する方法!
- 19. 独習PHP 第4版のアウトプット(第1章_PHPに必要な知識_前編)
- 20. phpのオブジェクト指向の整理
if ($user[‘role’] === ‘admin’)←こういうのやめたいって話
今日も今日とてドメインをモデリングしているみなさん、こんにちは。
今回は別にドメインモデリングの話をしたいわけではなくて、そんな話ができるような知識ベースが私の中にあるわけでもないのですが、それに近い何かだとは思います(?)
## とある現場にて
「このシステムのドキュメントってありますか?」
「そんなのないよ。なんで?」
「管理者と一般ユーザーの権限の違いを把握したくて」
「コード読めば分かるでしょ」
「あっはい分かりましたありがとうございますお邪魔しました」言いたいことは色々あるでしょうが、そこはぐっと堪えていただいて。
コードを読めば分かるとのことなので、さっそく目を通してみましょう。“`PHP
if ($user[‘role’] === ‘admin’) {
/* 管理者限定の処理 */
}
“`どこか懐かしい気持ちになるコードですね。
`’admin’`をハードコーディングしているのが良くないというのは分かると思います(`$user`が配列なのもポイント高いですけどね)。
このままでは修正が面倒なので定数を作ることにしまし
PHPでの引数の渡し方によって、メモリの消費は異なる
PHPでの引数の渡し方によって、メモリの消費は異なります。主に以下の2つの方法があります:
1. 値渡し(デフォルト):
値渡しの場合、引数として渡されたデータの新しいコピーが作成されます。これは追加のメモリを消費します。“`php
function valuePass($x) {
$x = 10;
}$num = 5;
valuePass($num);
“`この場合、`$num`の値のコピーが作成され、関数内で使用されます。元の`$num`は変更されません。
2. 参照渡し:
参照渡しの場合、変数のメモリアドレスが渡されるため、追加のメモリは消費されません。“`php
function referencePass(&$x) {
$x = 20;
}$num = 5;
referencePass($num);
“`この場合、`$num`のメモリアドレスが渡されるため、追加のメモリは使用されません。
ただし、以下の点に注意が必要です:
– 小さなデータ型(整数や浮動小数点数など)の場合、値渡しと参照渡しのメモリ消費の差はほとんどあり
PHPUnitの書き方
### 背景
Laravelを使ったAPI開発をしている中、PHPUnitを使ってテストコードを書く機会があり、PHPUnitの書き方が?な人に向けて基本的な書き方を[公式](https://docs.phpunit.de/en/11.3/writing-tests-for-phpunit.html)から抜粋して、参考になりそうなページを備忘録として書き記しましたので、クイックスタートとして参考になれば幸いです。
### 基本的な書き方
名前を指定して挨拶を返す“`Greeter.php“`は、引数に名前を指定して’Hello,
{名前}’を返します。
“`Greeter.php
独習PHP_第4版のアウトプット(第1章_PHPに必要な知識_中編)
「独習PHP 第4版」を読んだ内容を、簡潔にまとめています。
最新の知見も合わせると情報が古い箇所もあるため、その点はアップデートしました。
早速、第1章 中編で学んだ内容をアウトプットしていきます。
## 第1章 イントロダクション 中編
### 何故PHPを使用するのか?
本書の著者の視点として、**PHPを学習することには次のようなメリット**があります。
– **習得が容易であること。**
文法をシンプルに記述することができます。また、あらかじめ用意された**ライブラリ**(コーディングの便利なツール)も充実しています。– **ドキュメントが充実していること。**
歴史のある言語のため、様々な構文と用例が紹介されています。**公式ドキュメント**を活用するだけでも、非常に勉強になります。– **利用できる環境が豊富であること。**
他の言語も引けを取らないものの、対応している**ホスティングサービス**(レンタルサーバー)がPHPでは特に多いです。また、**AWS**などのクラウドサービスでも積極的にサポートしています。ここま
【Laravel】Pintで改行コードがLFになる問題の解消方法!
泉([@izumin_0401](https://twitter.com/izumin_0401))です。
今回は、LaravelのPintで改行コードがLFになる問題の解消方法を解説しやす!!
# ブログ記事はこちら
https://traveler0401.com/laravel-pint-lf-crlf/
# そもそもpintでは無理
そもそもですが、pintでは改行コードの設定は変えられないっぽいです。なので、「.gitattributes」で改行コードを設定します。
# 「.gitattributes」の設定
“`
* text=auto eol=crlf
“`
これでOK!!# まとめ
もはやLaravel Pintの解説ではないのである!ではまた!
# 最後に
暇つぶしに[Twitter](https://twitter.com/izumin_0401)と[ブログ](https://traveler0401.com/)もやってるので見てね。
access.logをAthenaで分析できる環境を構築してみた話
## 概要
EC2で収集した`access.log`をS3に転送して、S3上のgz形式のログファイルをAthenaで分析できる環境を**作成**しました。—
## そもそもAthenaってなに?
> Amazon Athena は、オープンソースフレームワーク上に構築されたサーバーレスのインタラクティブな分析サービスで、オープンテーブルとファイル形式をサポートしています。
> Athena は、ペタバイト規模のデータが存在する場所で分析するための簡素化された柔軟な方法を提供します。Amazon Simple Storage Service (S3) データレイクと 25 以上のデータソース (オンプレミスデータソースや SQL または Python を使用した他のクラウドシステムを含む) からデータを分析したり、アプリケーションを構築したりできます。
> Athena は、オープンソースの Trino および Presto エンジンと Apache Spark フレームワーク上に構築されており、プロビジョニングや設定は不要です。要するに **S3にデータを設置す
【PHP】 スーパーグローバル変数(定義済み変数)
## スーパーグローバル変数とは
PHPのスーパーグローバル変数は、定義済み変数でプログラムコード中何処からでも使用可能な変数のことです。 関数やメソッドの内部からアクセスする際にも「global $変数名」などとする必要がない。スーパーグローバル変数は9種類あります。
## 変数一覧
1. [**$GLOBALS (グローバル変数)**](https://qiita.com/With21/items/78e80197cd0f7fbe36c5)
+ グローバルスコープに現在定義されているすべての変数への参照
+ 連想配列として使用
2. **$_SERVER (サーバー変数)**
+ サーバー情報および実行時の環境情報
+ 連想配列として使用
3. **$_GET (GET変数)**
+ URLパラメーター、HTTP GET として送られてきた値を取得する変数
+ 連想配列として使用
4. **$_POST (POST変数)**
+ HTTP POST で送られてきた値を取得する変数
+ 連想配列として使用
5. **$_FILE
PHP(動的型付け)・PHP(動的型付け+型指定)・Go(静的型付け)の比較
型に注目してPHPとGoを比較してみます。
1年ほど前まではPHPで型を指定せずに実装していたので、その視点からまとめてみました。
## 動的型付け(PHP)の主なメリットデメリット
### メリット
少ない工数で実装が可能。型を指定しなくて良いため、コード量が少なくなる、及び型について考える必要がない。経験の少ないエンジニアでも容易に実装可能。
### デメリット
型の指定がないため、実装時に型の違いに気づけず、予期せぬバグが発生しやすい。また、型がバグの原因である場合に原因の追求に時間がかかる。
型の指定がないことで、メソッドの引数を見た際にどのような内容や意図の引数なのか分かりにくい。毎回、元のデータを追っていくのが手間となる。
例1)記事詳細情報取得
“`
class ArticleService
{
/**
* 記事詳細情報取得
*/
public function detail($id)
{
return [$article, $dramaList, $related]
…
PATHの通っていない場所にインストールしたPHP向けの拡張モジュールコンパイル
– `/usr/bin/php`: PHP8.3(APTで入れたもの)
– `/opt/php8.4/bin/php`: PHP8.4 RC1(ソースからビルドしたもの)という2バージョンが共存しているマシンで、PHP8.4 RC1向けにXdebugをビルドしたかった。
8.4のphpizeを使えば行けるのかと思ったらそうではなかったのでメモ。普通にphpize+./configureしたときのログ
“`console
~/xdebug-master$ /opt/php8.4/bin/phpize
Configuring for:
PHP Version: 8.4
PHP Api Version: 20240924
Zend Module Api No: 20240924
Zend Extension Api No: 420240924
$ ./configure –prefix=/opt/php8.4
checking for grep that handles
【PHP】Carbon使用する時に気をつけること
# はじめに
Carbon使用する時に気をつけたいと思ったのでメモです。# SubMonthsメソッド
– 1ヶ月前を取得を検索するとだいたい`subMonth()`メソッドが結果としてよく出ているが、月末になると日付がずれてしまうので注意が必要。
“`
$date = new Carbon(‘20241031’)->subMonth(1);
echo($date);
“`– 結果は`2024-10-01 00:00:00`になり、期待している`2024-09-30 00:00:00`にはならない。CarbonはDateTimeのラッパーとして、存在しない日付に対して適切に調整してくれるらしい。この場合は9月31日は存在しないので、10月1日に調整してくれているみたい。
# subMonthsNoOverflowメソッド
– 上記のようにならないために`subMonthsNoOverflow`を使用すると良いみたい。
“`
$date = new Carbon(‘2024-10-31’)->subMonthsNoOverflow(1);
echo $date;
Laravelでテーブルのカラムを変更するための方法
# はじめに
Laravelを使ってアプリを作る際にテーブルのカラム変更が発生した場合のマイグレーションの備忘録として記録します。# (例)User Tableのカラムを変更したい場合
(注意)
テーブルの更新をする場合は、あらかじめデータのバックアップを取得しておいてください。ユーザーテーブルを例に説明します。
(更新前)
|ユーザー名|メールアドレス|パスワード|作成日|更新日|
|———|————-|——–|——|——|
|Qiitaたろう|taro@qiita.com|qiitAbc|2024-01-01|2024-02-01|(更新後)
|ユーザー名|メールアドレス|パスワード|作成日|更新日|権限|
|———|————-|——–|——|——|—-|
|Qiitaたろう|taro@qiita.com|qiitAbc|2024-01-01|2024-02-01|true|権限の列を増やしたい場合、Mig
WordPressで各ページのh1に任意の画像を設定する方法
WordPressで各ページのh1に任意の画像を設定する方法を紹介します。
## 使用しているテーマとプラグイン
テーマ:[Cocoon](https://wp-cocoon.com/)
プラグイン:[Advanced Custom Fields](https://www.advancedcustomfields.com/)## カスタムフィールドの設置
プラグイン『[Advanced Custom Fields](https://www.advancedcustomfields.com/)』をインストール&有効化して、`Field Type`を`image`に設定します。
`Field Label`に適当な名前を付けて保存します。![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902958/ed6b2cd1-d529-5abb-fedb-87ac782b802d.jpeg)
これで、各ページの編集ページの下部にカスタムフィールドが出現します。↓
![postedit.pn
PHPStanのエラー箇所へ1クリックで飛べるようにする設定
# 初めに
PHPStanで解析をした際、エラーの箇所をいちいち手動で開くのってちょっと面倒ですよね。
今回は、エラーの箇所にすぐに飛べるようになる設定をご紹介します。# エラーの箇所に飛びたい!
PHPStanでエラーを検出すると以下のような結果が出力されます。“`sh
$ ./vendor/bin/phpstan analyse
Note: Using configuration file C:\path\to\project\phpstan.neon.
3/3 [============================] 100%—— ————————————————————————–
Line level\Level0.php
—— ————————————————————————–
:759 Method Util\Level0
VSCodeの型ヒント表示を無効化する
# 課題
VSCodeバージョンアップで、関数の引数や返値の型ヒントが自動的に表示されるようになった。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20427/a1e85986-ac6c-f390-09ae-aadaafc7da8a.png)
邪魔なことが多いので非表示にしたいが、設定方法の発見に意外と時間がかかったのでメモ。
# 解決
変更する設定 : `Editor › Inlay Hints: Enabled`![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20427/0fa711c3-23dd-c784-2aa2-45fd30302bc4.png)
`off`にすると非表示にできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20427/7b7017
Strategies to Improve Your Design Skill
What are the best strategies to improve your design skills? Although graphic design is a fantastic sector, it is always changing and developing. This implies that sometimes graphic designers may feel as if their graphic design abilities are no longer current and that they have been left behind in the business. Does it sound very familiar? Do not panic; all you have to do is return your design abilities to their previous brilliance! Therefore, here are many strategies to hone your graphic design
Laravel ORM(Eloquent)チートシート
# Laravel ORM(Eloquent)チートシート
## モデル操作の詳細
### モデルの定義
“`php
class User extends Model
{
// テーブル名の指定(デフォルトはモデル名の複数形)
protected $table = ‘users’;// 更新可能なカラム
protected $fillable = [‘name’, ‘email’, ‘password’];// 非表示にするカラム(例: JSONシリアライズ時)
protected $hidden = [‘password’];// キャストするデータ型
protected $casts = [
‘email_verified_at’ => ‘datetime’,
];
}
“`### データの取得(詳細)
“`php
// 全件取得
$users = User::all();// 条件付き取得(1件だけ)
$user = User::where(‘email’, ‘
171日目 Laravel(PHP)でマイグレーションファイルを使いこなそう! by社畜♀
# 第2話《マイグレーションって便利だなぁ~》
Laravelのマイグレーションを触る機会があり、理解できると楽しかったのでまとめておきたいと思います!
自分と同じような人の助けになればなによりです。:bow_tone1:Laravelのマイグレーションは、データベースのスキーマ(テーブル構成やカラムなど)を簡単に管理・変更するための強力なツールです。
主にWebアプリケーションフレームワークで使用され、データベース構造の変更をコードで管理できるため、変更履歴を追跡することが可能です。
また、マイグレーションはバージョン管理システムを通じて他の開発者と共有することも簡単に行えます。:ok_hand_tone1:## マイグレーションの基本コマンド
Laravelでは、マイグレーションを管理するためのさまざまなコマンドが用意されています。
**1.マイグレーションファイルの作成**
新しいマイグレーションファイルを作成するには、Laravelプロジェクトのルートディレクトリで以下のコマンドを実行します。
“`bash:bash
php arti
【Laravel】X-Forwarded-ForからIPアドレスを取得する方法!
泉([@izumin_0401](https://twitter.com/izumin_0401))です。
今回は、LaravelでX-Forwarded-ForからIPアドレスを取得する方法を解説するンゴ。
# ブログ記事はこちら
https://traveler0401.com/laravel-x-forwarded-for/
# 【Laravel】X-Forwarded-ForからIPアドレスを取得する方法
“`php
header(‘X-Forwarded-For’);if ($forwardedFor) {
独習PHP 第4版のアウトプット(第1章_PHPに必要な知識_前編)
こんにちは。
PHP & Laravelを使用する企業に内定したため、先取学習を始めました。
「独習PHP 第4版」を読んだ内容を、簡潔にまとめております。
最新の知見も合わせると情報に古い箇所もあるため、その点はアップデートしました。
早速、第1章_前編で学んだ内容をアウトプットしていきます。
## 第1章 イントロダクション 前編
### PHPについて
**PHP**は**Webアプリケーション**の作成を容易にするために開発された、**サーバーサイドのスクリプト言語**です。
スクリプト言語とは、主にウェブ開発やタスクの自動化に使用される高水準(人間に読みやすい)のプログラミング言語です。
また、Webアプリケーションとは、インターネットを経由して利用できるサービスやアプリのことで、具体的にはGoogleの検索エンジンやAmazonのショッピングサイトなどがあります。
### クライアントとサーバー
Webの世界では「**クライアント**」と「**サーバー**」という概念があります。
– **クライアント**:情報を受け取る側、つまりユーザーのデバイスや
phpのオブジェクト指向の整理
# 始めに
オブジェクト指向はクリーンアーキテクチャするうえでは持っておきたい知識だと思ってる。今まで以下のような書籍を読んだが、これから会社都合でガッツリlaravel書くことになりそうなのでphpならどんなふうに考えるのかの整理のために書いていく
# 今まで読んだオブ脳関係
(多分絶版だけど。アフィリンクじゃないよ!)
メルカリにも中古は有るよ。
### オブジェクト指向設計実践ガイド(Ruby)
Ruby触るならイメージ湧きやすと思う。https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-Ruby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F