PHP関連のことを調べてみた

PHP関連のことを調べてみた

LaravelでCommand実行する

:::note
command実行できるアプリケーションをLaravelで作る方法
– artisanコマンドでCommandクラス作成
– routes/console.php内に記述
:::

# 背景
業務でphpファイルをコマンド実行することがありましたので復習の為にまとめます。

:::note
今回はLaravel Sailを使用します。SailはアプリケーションのDockerコンテナ内でArtisanコマンドを実行します。
:::

以下が今回の勉強の為に作ったリポジトリです。

https://github.com/yamatai12/laravel-command

以下参考に進めます。

https://laravel.com/docs/11.x/artisan

# Commandクラスとは
コマンド実行後に呼び出されるクラスです、コマンド実行時に行いたい処理を記述できます。

# Commandクラスを作成する

:::note
`./vendor bin sail`を`sail`に省略しています。
:::

“`terminal
sail artisan m

元記事を表示

$request->input(‘key’)は何をやっているの

Laravelでのapi実行が知りたく、api.phpから処理を追っているときに、controllerで`$request->input(‘hogehoge’)`みたいなことを良くしていたためどういうメソッドかまとめる。

## inputメソッド
`$request->input(‘key’)`はどうやらリクエストに含まれる入力パラメータの値を取得しているようだ。
以下の場合、limitというパラメータを探してきて、その値を$limitに入れている。
“`php
$limit = $request->input(‘limit’);
“`
例えば以下のようなリクエストのURLがあった場合
“`
http://XXXXXX.com/api/test-api/XXXXXX?limit=10
“`
limit=10が設定されているため$limitには10が返される。
## デフォルト値
ちなみに、inputメソッドには第二引数としてデフォルト値を指定できる。
“`
$limit = $request->input(‘limit’, 0); // limitがない場合は0を返す

元記事を表示

三項演算子の使い方について(初心者向け)

# はじめに
この記事は三項演算子の使い方について学習した際の備忘録です

修正点および加筆が必要な場合は都度更新します

## 三項演算子とは?
三項演算子は、条件式を使って値を選択するための演算子で、?(疑問符)と :(コロン)を使って表現します。一般的な構文は以下の通りです。
“`js
条件式 ? 真の場合の値 : 偽の場合の値
“`

## 基本的な使い方

例えば、数値が10以上かどうかを判定し、その結果に応じてメッセージを返す例の場合
“`js
let number = 15;
let message = number >= 10 ? “10以上です” : “10未満です”;
console.log(message); // 出力: 10以上です
“`

### ネストされた三項演算子

三項演算子は、入れ子にすることも可能です。ただし、可読性が低くなるため、使いすぎには注意が必要です。
“`js
let score = 85;
let grade = score >= 90 ? “A” : score >= 80 ? “B” : score >= 70 ? “

元記事を表示

PHPドキュメント「リファレンスの説明」の要約

# リファレンスとは?

https://www.php.net/manual/ja/language.references.whatare.php

PHPのリファレンスは、同じ変数の内容を異なる名前で呼び出す機能です。以下にリファレンスの主な特徴をまとめます:

## リファレンスの特徴

1. **エイリアス**: リファレンスは変数のシンボルテーブルのエイリアスとして機能します。

2. **ポインタとの違い**: Cのポインタとは異なり、メモリアドレスを直接扱うものではありません。

3. **ガベージコレクション**: すべてのリファレンスが削除されるまで、参照先のデータはガベージコレクションの対象になりません。

4. **変数の扱い**: 通常の変数もリファレンスとして扱われ、ガベージコレクションの観点からは`=&`で代入されたリファレンスと区別されません。

## リファレンスの動作

– リファレンスを使用すると、複数の変数名が同じデータを指すことができます。
– 配列要素やオブジェクトのプロパティにもリファレンスを使用できます。
– `foreach`ループでリフ

元記事を表示

197日目 APIの実装【準備編】(バックエンド)

仕事でAPIをさわる機会があり、APIってすごいな!と思ったので今後APIをさわる機会がある方が少しでもAPIへの理解が早くできるように初心者ながらにまとめていきたいと思います!

1つにまとめきれないくらい情報があるので分けていきます!
今回は「APIとは?」「環境設定で必要なもの」「ルーティング設定」についてまとめましたので誰かの力になればなによりです!

## 第1話《APIってなんぞやッ!?》

API(Application Programming Interface)は、アプリケーション同士が通信し、データや機能をやり取りするためのインターフェース(仕組み)です。
APIを使うことで、異なるシステムやサービスが相互に連携し、データや機能を共有できるようになります。

**1.データアクセス**
・システムやデータベースに保存されているデータにアクセスし、外部からリクエストに応じてそのデータを提供します。
例:商品情報、ユーザー情報、注文履歴などを取得するためにAPIを呼び出す。

わかりやすく言うと、`フロントとバックを繋げる橋渡し的な役割`です。

**2.機能の理由**

元記事を表示

PHPにおけるNULL安全

# NULL安全とは
 NULLによるエラーをコンパイルまたは静的解析で検出し、実行時にNULLによるエラーを起こさないことです。NULL安全が高いか低いかは基本的にはプログラム言語に依存します。型には基本的にNULL許容型とNULL非許容型があり、それらが別物として扱われることがNULL安全を満たす条件です。理由は後述します。

 PHPにおけると銘打っておきながら、まずはkotlinという言語を例に上げてNULL安全の説明をします。kotlinは静的型付き言語なので基本的に型を定義していくのですが、通常定義される型はNULL非許容型になります。NULL非許容型とはその名の通りNULLを代入できない型のことです。
“`kotlin
//NULL非許容型
var intObject: Int = 10
var stringObject: String = “test”
var sampleObject: SampleObject = SampleObject()

//以下をコンパイルするとエラー(最近はIDEで怒ってくれる)
var intObject: Int = null
va

元記事を表示

phpの参照渡し(リファレンス渡し)を使ってみる

:::note alert
参照渡しは非推奨のようです。コメントに詳細付けてもらったのでそちらをご確認ください。
:::

概要

公式マニュアルには以下のように記載がされています。

リファレンス渡し
リファレンスにより関数に変数を渡すことが可能です。この場合、関数内で その引数を修正可能になります。構文は次のようになります。

マニュアル内では関数での利用法について記載がありますが、私が使用したforeach内での活用方法について記載します。

活用方法

共有する関数内で生成されたオブジェクトにおいて、一部の要素が不要といった状況が発生しました。

オブジェクトの特性

“`tex
・親キーがランダムである
・削除対象の子キーが同一である
“`

上記に倣ったオブジェクトの例

“`php
$data = [
‘123456’ => [
‘aaa’ => […],
‘bbb’ =

元記事を表示

#69 Add Xdebug to existing PHP container projects

## Introduction

I found out there are many outdated setup articles which may not work for the Xdebug 3.1.X version. Therefore I jot down the setup of PHP with Xdebug and docker.

## Setup

edit dockerfile to install xdebug

“` Dockerfile
RUN pecl install xdebug && docker-php-ext-enable xdebug
“`

copy xdebug config to php config folder

“` ini
[xdebug]
xdebug.mode=off
xdebug.start_with_request = yes
xdebug.client_host = “host.docker.internal”
xdebug.idekey=”VSCODE”
“`

In `docker-compose.ym

元記事を表示

チャットGPTさんと語る、スマブラを通してのオブジェクト指向

これはとある時に業界半年に満たない新人の私がオブジェクト指向ってなによ!?

ってなりつつもPHPをお勉強している時に思い付きでチャットGPTさんと会話した際の記録です。

スマブラとかマリオ出てきますし、内容に突っ込みどころがあればコメント頂けたら嬉しいです。

尚、全体的に勉強初めて半年に満たないのですごく専門的な質問されてもあわあわするだけなのであしからず。

しかも都合上会話の途中から切り取っておりますのでご容赦くだしあ。

ほぼ自分のための備忘録的な何かです。

しかも初投稿なのに大半コピペです。

あしからず。

「あなた」とは私の事です。

ChatGPT:
その通りです!親クラスは一般的な属性やメソッドを持ち、子クラスや孫クラスはそれを継承して特定の振る舞いや属性を持つことで、より具体的な存在になります。以下のポイントでこの関係を詳しく見てみましょう。

親クラス、子クラス、孫クラスの関係
親クラス:

親クラスは、共通の属性やメソッドを持つ一般的なクラスです。たとえば、Menuクラスはメニュー全般に関する情報を提供します。
子クラス:

子クラスは、親クラ

元記事を表示

LaravelでDBの同じ行のAとBの値を足した値でwhereしたい

# はじめに

こんにちは、エンジニアのkeitaMaxです。

Laravel11でDBの同じ行のAとBの値を足した値でwhereしたいということで備忘録で書こうとおもます。

# やりたいこと

|a |b |c |
|—|—|—|
|1 |2 |3 |
|10 |2 |30 |

こんなテーブルがあった時に、a+bが10以上のものをとってくる処理を書きたいと思います。

# 結論

“`php
$query->where(DB::raw(‘a + b’), ‘>=’, 10);
“`

こんな感じで`DB::raw`を使えばできました。

# おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました!

元記事を表示

CakePHPでセッション情報を別ページで渡す方法

# 対象読者
CakePHPでセッション情報の使い方を知っておきたい方

# 環境
CakePHP 4.5.7

# セッションの設定は「app.php」に記述する
セッションの情報は、app.phpに記載します。
さっそくですが、app.phpの全体コードを見てみましょう。

“`config/app.php

元記事を表示

PHPカンファレンス沖縄2024前夜祭 登壇レポート

# はじめに

2024-09-27に、PHPカンファレンス沖縄2024前夜祭で登壇してきました!
10分間のLTなのですが、大変楽しく学びも多かったので、体験レポートを書きます!

## 自己紹介

yoneda です!
株式会社Relicという会社にてEMをしています。
エンジニアイネーブルメントの領域を担当しているグループに所属していて、
具体的には、以下のような業務を進めています。

* DevOps導入
* IaaS(CDK, AWS SAM)
* CI/CD
* 他…
* Webアプリのスケルトンプログラム作成
* スケルトンプログラムは他言語含め、複数あり
* PHP+Laravelの構成のものが利用最多

自分の開発者キャリアの中で、言語ではPHPに最も親しんでいるのもあり、
学びを得たり、自分から何か学びを与えることができたらと、
PHPカンファレンス沖縄に応募しました。

さて、なぜ沖縄なのか。

[沖縄に弊社の拠点がある](https://relic.co.jp/corporate_base/okinawa-innovati

元記事を表示

[Laravel] グループ化したURLでバリデーションが通らなかった

# なぜ?
これだと通らなかった
“`php
Route::group([‘prefix’ => ‘{id}’]function() {
Route::get(‘/’, [TestController::class, ‘index’])->name(‘index’);
Route::get(‘/detail’, [TestController::class, ‘details’])->name(‘detail’);
})->whereNumber(‘id’);
“`

こいつはいけたけど、いちいち`->whereNumber(‘id’)`をつけるんか?って話
“`php
Route::group([‘prefix’ => ‘{id}’]function() {
Route::get(‘/’, [TestController::class, ‘index’])->name(‘index’)->whereNumber(‘id’);
Route::get(‘/detail’, [TestController::class, ‘detail’])->nam

元記事を表示

PHPでpreg_replaceのエラーが出て動かない

PHPをアップデートしたら以下のエラーがでるようになって、Webアプリが動かなくなりました。

“`
preg_replace(): Compilation failed: unrecognised compile-time option bit(s) at offset 0
“`

おかしいと思って調べたら、libpcreの問題らしいことが分かりました。

ChromebookのLinux環境だったので、以下のようにライブラリをアップデートしたら直りました。

“`sh
sudo apt install libpcre2-8-0
sudo apt install libpcre2-16-0
“`

### 参考

https://let.blog.jp/article/31724231

https://stackoverflow.com/questions/70040287/php7-4-
preg-replace-compilation-failed-unrecognised-compile-time-option-bi

元記事を表示

[PHP]オブジェクト指向でさっそく躓いたって話。

# オブジェクト指向とは
細かい話は先人が山ほど解説しているのでここでは、
プログラムを「オブジェクト」と呼ばれる細かいパーツに分けて組み立てていくよ、という考え方とだけ。
#### $this を付け忘れてエラーが多発
学び始めてからすぐに、`$this`というものに悩まされました。コードを書いていると、よくエラーが出てしまい、原因を探してみるとどうやら`$this`を付け忘れていたのが原因でした。
###### よく陥った悪い例
最初こんな感じでコードを書いていました。
“`php
class OmochaBox {
private $omochas = [];

public function addOmocha($omochaname) {
// おもちゃを追加するメソッド
$omochas[] = $omochaname; // これが間違い
}
}
“`
これだとエラーが出るか、もしくは欲しい実行結果にならないか。
###### 正しいコード
“`php
class OmochaBox {
private

元記事を表示

AI機能を付けたSNSを開発してみました!

このSNSでは、**AI**と共に言葉を交わしながら、皆で会話を楽しむことができます。AIが会話に参加することで、より深く、質の高いコミュニケーションを体験していただけます。

ぜひご参加ください!
**[新しいSNS Avis](https://avis.city/)**

## 特徴

– **ユーザー登録不要**:すぐに誰でも利用可能!
– **AIと共に楽しむ会話**:人間同士の会話にAIの分析、回答、解説を織り交ぜることで、深みのあるコミュニケーションが可能。
– **リアルタイム反応**:AIがコメントに反応するまで、少し時間がかかりますが(約5分)、その分、深い分析をしてくれます。

## 使い方

1. **コミュニティ作成**
コミュニティを作成すると、**自動的にAI分析**がONになります。

2. **コメント投稿**
投稿時、AI分析の**ON/OFF**を自由に切り替えることができます。

## 今後の展開

現在は**簡単な構造**にしていますが、機能は随時追加中です。
皆さんのフィードバ

元記事を表示

Webサーバ上で生成した画像データをWebクライアントに出力する

# 概要
Webサーバ上で画像を動的に生成し、Webブラウザ等のクライアントに表示させたりダウンロードさせたりしたいことがあります。
本稿ではその手順についてPerl, PHPでのサンプルコードを紹介します。

# 前提
## 画像データの生成方法について
本稿では、簡略化のため、画像データについてはファイルから読み込んでそのまま出力することとします。
GDライブラリを使用した画像データの生成方法については別途説明したいと思います。

# サンプルコード
## 基本的な流れ
1. 画像データを生成する
ここでは、スクリプトと同じディレクトリのsample.pngという名前の画像ファイルを読み込むようにします。
1. HTTPヘッダを出力する
Content-TypeヘッダでPNG形式を指定し、Content-Dispositionヘッダで出力するファイル名を指定します。(後者は必須ではありません。)
Perl版ではロジックの関係上画像ファイルの長さを取得できるので、Content-Lengthヘッダをサボらずに出力しています。
1. 画像データを出力する

PHP, Perlの順にコー

元記事を表示

【Laravel】テーブル変更(カラム追加)

運用中のテーブルに対し、
カラムを追加する際の流れについて説明します
## マイグレーションファイルの作成
下記コマンドで、マイグレーションファイルを作成します
~~~
php artisan make:migrattion add_new_column_to_books_table –table=books
~~~
コマンド内容は、
`php artisan make:migration` `ファイル名` `–table=テーブル名`
これで __database/migrations__ の中に __作成日時_ファイル名.php__ が作成されます
## マイグレーションファイルの編集
database/migrations の中に作成されているので編集します
~~~database/migrations/2024_10_20_000000_add_new_column_to_books_table.php

元記事を表示

【Laravel】テーブル作成#1

## マイグレーションファイルの作成
下記コマンドで、マイグレーションファイルを作成します
~~~
php artisan make:migrattion create_books_table –create=books
~~~
コマンド内容は、
`php artisan make:migration` `ファイル名` `–create=テーブル名`
これで __database/migrations__ の中に __作成日時_create_books_table.php__ が作成されます
## マイグレーションファイルの編集
database/migrations の中に作成されているので編集します
~~~database/migrations/2024_10_20_000000_create_books_table.php

元記事を表示

名前空間(namespace)とuseの違いを、例えを用いて初心者にも分かりやすく

名前空間(namespace)とuseの違いを、図書館と本の例えを使って説明します。

### 名前空間(namespace)は図書館のセクション
想像してみてください。大きな図書館があって、その中にはたくさんのセクションがあります。それぞれのセクションには異なる種類の本が並んでいます。

* 名前空間はそのセクションの名前:
たとえば、図書館に「科学」セクションと「歴史」セクションがあるとします。これらのセクション名は、名前空間に相当します。科学の本は科学セクション、歴史の本は歴史セクションにあります。
* 目的:
「同じタイトルだけど内容が異なる本」(たとえば「地球の成り立ち」というタイトルの科学用の本と歴史用の本)が名前の衝突をしないようにするためです。それぞれの本はセクション名(名前空間)を持つことで、それがどの領域に属しているのかを明確に区別できます。

PHPでの例
~~~PHP

namespace Science;

class Earth {
// 科学セクションに関連したクラス
}

namespace History;

class Earth {

元記事を表示

OTHERカテゴリの最新記事