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

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

初心者にもわかる! クラスとオブジェクト指向の基礎

## はじめに
みなさん、初めまして。エンジニア歴1.5年のエンジニアです。
最近、後輩からプログラミングの基礎的な質問をよく受けるようになりました。

「オブジェクト指向ってなに?」
「クラスってなんだよ?」

こういった質問に対して、分かりやすく説明できるよう自分なりにまとめようと思います。

では、レッツスタート:point_up:

## オブジェクト指向プログラミング(OOP)
オブジェクト指向プログラミング(OOP)は、効率的で再利用可能なコードを書くことを目的としています。
まずは、OOPの基本である「クラス」について説明していきますね。

## クラスとは?
クラスは、オブジェクトの設計図とよく言われます。
「設計図? なんやねんそれ」と思った方、落ち着いてください。
私たちは日常的に、人間を表現することがあります。
例えば、友人や家族の情報を他人に説明したり、新入社員の紹介文を書いたりする際です。
そんな時、クラスが役に立ちます。

クラスの中には、人間を表現するための項目(プロパティ)と、人間らしい動作(メソッド)が書かれています。

プロパティとは、オブジェクトの

元記事を表示

改行したいところで PHP_EOL (PHP End Of Line)

### 発見
コードを読んでいたら、テキストでも代数でもない何か(PHP_EOL)が echo されていたので、調べたところ『改行』を表す、定義済み定数だった。ので、忘備録。

### 使用例
“`

“`

### 利点
OSが違うと、改行コードの認識も変わります。
* Unix/Linus: \n (newline character の意味)
* Windows: \r\n (carriage return followed by a newline character の意味)
* クラシックなMac OS: \r (carriage return の意味)

`PHP_EOL` の使用は、プラットフォームに関わらずに改行を表すことが可能なので、コードがより便利に使えることになります。

違ったOSでのアウトプットを扱う場合は特に、`PHP_EOL`を使うのがベストプラクティスのようですね。

### 追記
####

元記事を表示

【DAY2】Laravelについて

# Laravelとは
Laravelとは、PHPのフレームワークの一つです。
LaravelのプロジェクトはMVCモデルに基づいて構成されています。
## フレームワークとは
フレームワークとは、WEBアプリケーションやシステムを開発するために必要な機能があらかじめ用意された枠組みです。
通常フレームワークには、セキュリティを強化したり、データベースアクセスを効率よくプログラミングしたりするのに便利な、多種多様な機能が備わっています。
## フレームワークの利点
フレームワークを活用すると、フレームワークの思想に沿った共通な形式でのコーディングが可能になるため、エンジニアによる記述の際を減少させられ、ソースコードの可読性と保守性を向上させることができます。
## フレームワークの欠点
フレームワークには使用法の決まりがあるため、自由にコードが書けず開発に制限が生じます。フレームワークイン決まりやスタイルを押し付けられ、いい設計を適用したくてもできなくなってしまう問題です。
## フレームワークとライブラリの違い
フレームワークは、**アプリケーションの「枠組み」を提供するもの**です

元記事を表示

threads-Apiで投稿するための雛形

# threads-Apiで投稿するための雛形
下記のドキュメントを読んで前提条件であるthreadsの設定やコールバック設定等を
行ってからご使用ください.
尚、コールバックとして設定しているファイルは「auth/redirectCallback.php」です(github参照).

#上記の設定を行った後、下記の通り手順を踏む.

1 . 出力されたリンクをクリック
“`php:auth/authorize.php
authorize();
if($argv[0]){
var_dump(urldecode($auth));
}

“`
2 . リダイレクトページの処理が走る
“`php:auth/redirectCallback.php
redirectCallback()->getAccessToken()->changeLongAccess

元記事を表示

declare(strict_types=1)を常に設定したい。

# はじめに
PhpStormでクラスを作成する時に、イチイチ`declare(strict_types=1)`を設定するのが面倒なので、クラス作成時に自動で設定されるようにしたい。

# 解決策
PhpStormのCode Templateを利用することにしました。
Setting > Editor > File and Code TemplatesでPHP Classを選択し、テンプレートの先頭に`declare(strict_types=1)`を追記します。
![スクリーンショット 2024-06-20 6.29.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798259/13c2c212-94d6-6e1c-96d5-56a67d161bf4.png)

# メモ
declare(strict_types=1)とは?
>暗黙的な型変換が行われなくなり、より厳密にタイプヒンティングをチェックするようにできます。
引用元:https://qiita.com/kazuhei/items/af

元記事を表示

PHP 8で開発効率を向上させる方法

PHP 8は、開発効率、パフォーマンス、全体的な言語品質を向上させるための多くの新機能と改善を導入した重要なバージョンです。本記事では、PHP 8がどのようにして開発効率を促進するのか、さまざまな機能と言語の改善点を通じて探っていきます。

### 拡張された型システム
PHP 8は、名前付き引数、改善された型宣言、Union Typesのサポートなど、拡張された型システムを導入しています。これらの改善により、コードがより明確になり、型の問題による実行時エラーの可能性が減少します。拡張された型宣言は、IDEがより良いコードの提案と静的解析を提供するのにも役立ち、開発体験を向上させます。

“`php
// 名前付き引数
function greet(string $name, string $greeting): string {
return “$greeting, $name!”;
}

// Union Types
function processValue(int|float $value): void {
// 処理ロジック
}
“`

### 新しい言語

元記事を表示

Eloquentのグローバルスコープ解説: クエリ全体に一貫性を持たせる方法

:::note

AI要約

– グローバルスコープは特定のモデルに対する全てのクエリに適用され、select、update、delete、countなどの操作に自動的に適用される
– 特定の条件(例:active = 1やdeleted_at IS NULL)が全てのクエリに一貫して適用され、条件を満たすデータだけが常に処理される
– ローカルスコープはクエリビルダ内でメソッドチェーンとして呼び出されるが、グローバルスコープは自動的に適用されるため、明示的に呼び出す必要がない
– グローバルスコープはスコープクラスを定義し、それをモデルに適用することで利用される
– グローバルスコープを無効にするには、withoutGlobalScopeメソッドを使用する必要がある

:::
## はじめに
以前にローカルスコープの記事を出しました。今回はグローバルスコープについて解説していこうと思います。グローバルというのもあり、責任範囲が広くなってしまうので注意が必要ですよね

## 概要
Eloquentは、Larav

元記事を表示

あまり知られていないLaravelのコレクションメソッド #2: concat

# 目次

1. [あまり知られていないLaravelのコレクションメソッド #1: macro](https://qiita.com/aminevg/items/e3a49c62fa805bef09bd)
1. あまり知られていないLaravelのコレクションメソッド #2: concat (本記事)

# 背景

Laravelのコレクション、使いこなしていますか?

以下の記事を先程読んで面白いと思いました。

「あなたは使ったことがないLaravelのコレクションメソッド10選」

https://backpackforlaravel.com/articles/tips-and-tricks/top-10-collection-methods-you-have-never-used

ただし、英語で書かれていますし、各メソッドの説明が不十分に感じました。
ということで、以上の記事を翻訳する上で、それぞれのメソッドの活用方法を説明していきたいです!
今回はCollectionのconcatメソッドを解説します!

# concat: コレクションにarrayや他コレクションの中身

元記事を表示

PukiwikiプラグインがPHP8で動かなくなった問題

# 産業で説明

– dump2html.inc.php (と、それに依存する2つのphpソース)は、PHP8では動きません。
– 直し方をご説明します。

あれ?二行じゃん。

# PHP8で、classのコンストラクタの書き方が変わりました。

– 以前のPHPは、class名と同名のメソッドを書くとそれがコンストラクタになっていましたが、PHP8ではその書き方は完全に廃止され、呼ばれません。(エラメも出ない)
– PHP8では __construct() というメソッドがコンストラクタになります。
– classを継承して、親クラスのコンストラクタを呼ぶときも、parent::class名() ではだめで、parent::__construct() で呼ばないとだめです。(当然ですね)

# その他

– あともういっこありました。
“`
$配列名{0} —> $配列名[0]
“`
– なんで {} で配列の添え字が表現されてるんだろう・・・このソース。

このプラグインとは無関係ですが・・・
– create_function() も廃止されています。
– func

元記事を表示

Javascript+PHP+MySQLで面接室の予約システムを作ってみた

## 記事の概要
エンジニア未経験からの挑戦ということで企業様へアピールするためのポートフォリオを作成してみました。
作成手順と機能、工夫したところ、課題点を書き出してみようと思います。

### プロフィール
27歳 男性
ITは全くの未経験(前職は営業)
就労移行支援にて0からプログラミングを学ぶ。
**ポートフォリオ作成は期間2ヵ月~2か月半**(思ったより苦戦しました…)

## 目的
* JavascriptとPHPを使いつつDBとの連携も行えるよう経験を積む
* 今の自分のレベル感を企業に判断してもらう
* 素のJs、PHPでどこまで書けるかチャレンジ

# スペック
**言語**
Javascript (Vanilla Js)
PHP 8.0.19

**DBMS**
MySQL Ver 8.0.29

**開発環境**
Windows 11 Pro
IIS (Version 10.0.22621.2860)

## 完成画面
![qiita.gif](https://qiita-image-store.s3.ap-no

元記事を表示

PHPのバージョンを7から8にした時の覚書

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

PHPが、7.3.5から8.1.10へマイナーバージョンが上がることになった。
(*これを書いている数年前の話なので、少し古い)

それに伴って社内のみで稼働しているWebツールを改修することになった。

https://openstandia.jp/oss_info/php/version/

マイナーバージョンは軽微なものがおおいが、メジャーバージョンを更新するとなると結構コードの改修なんかが必要になることがある。

# PHPってなんだ

当時は、そもそもPHPというのを触ったのがほぼ初めてだった。
(初めての時、誰かの書いたコードを参考に、微修正するようなところから始まるのはよくあると思う。)

PHPは、サーバーで動くスクリプトで、動的にホームページを作成する言語だ。
チャットとか、掲示板とか、……というほど高度なことをしているわけではなかったが、社内でスケジュールの管理をするようなソフトである。
DBと連携はしているがやっていることはそんなに高度でもないし、影響範囲がせいぜい社内である。
(大事な仕事だけど、いざってときに迷惑をかける

元記事を表示

【CakePHP5】CodeSnifferを使用する

# はじめに

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

前回PHPStanを使用してGitHubにPushしてテストを実行させるところを作成しました。

https://qiita.com/keitaMax/items/6e354b9a0b7c54344fa1

今回はCodeSnifferを使用できるようにしたいと思います。

# インストール

すでにインストールされているので、新しくなにかをインストールしなくても大丈夫です。

# 実行

以下のコマンドで実行します。

“`
composer cs-check
“`

以下のように実行されます。

“`
root@4ab649b0155e:/app# composer cs-check
> phpcs –colors -p
………. 10 / 10 (100%)

Time: 137ms; Memory: 14MB

root@4ab649b0155e:/app#
“`
# 失敗させて自動修正してみる

`AppController`の`initialize(): void`この記述を`ini

元記事を表示

シーダーを作成するときにcsvを利用する方法

# データを一括で登録
備忘録です

# 手順
1. 以下のようなCSVファイルを用意する
“`:database/seeders/sample.csv
title,description,start_date,end_date
タイトル1,説明1,-20,-10
タイトル2,説明2,-10,-5
タイトル3,説明3,5,10
“`

1. シーダーファイルでCSVを読み込むようにする
“`php:database/seeders/SampleSeeder.php

元記事を表示

パーミッションエラーが発生したらとりあえずキャッシュクリア

# エラー内容
このようなエラーが発生しました。
“`
There is no existing directory at “/Users/hoge/workspace/SampleProject/storage/logs” and it could not be created: Permission denied
“`

# 対象方法
`.env`ファイルを修正後に間違えて`php artisan config:cache`を実行したことが原因でした。`php artisan config:clear`でキャッシュクリアしたところ直りました。

# メモ
“`:キャッシュクリアコマンド
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
“`

元記事を表示

Eloquentのローカルスコープ解説:効率よくクエリを管理しよう

:::note

AI要約

– PLaravelのEloquentにはローカルスコープとグローバルスコープがあり、この記事ではローカルスコープに焦点を当てる
– ローカルスコープはモデルのメソッドとして定義され、クエリの共通部分を再利用可能にする
– メリットにはコードの再利用性、可読性、メンテナンス性の向上があるが、過剰な抽象化や依存関係の複雑化のデメリットもある
– 定義したローカルスコープはモデルのクエリビルダ内で利用でき、アクティブユーザーの取得や特定のカテゴリのアイテム取得に使える
– ローカルスコープはモデルに対して定義され、そのモデルに基づくクエリに影響を与えるが、他のモデルから直接呼び出すことはできない

:::

## はじめに
LaravelでModelにクエリが集まったりして管理しにくいなーなんて思うようになって似たようなクエリを管理できるようにしたいと思った矢先にスコープという概念を知りました。
ローカルスコープ、グローバルスコープとありますが今回はローカルスコープについて解説してい

元記事を表示

SQLSTATE[HY000] [2002] Connection refusedの対象方法

# エラー内容
このようなエラーが発生しました。
“`
SQLSTATE[HY000] [2002] Connection refused
“`

# 対象方法
原因はenvの環境変数の値が正しく設定されていないことでした。
“`.env 初期の環境変数の値
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=forge
DB_USERNAME=forge
DB_PASSWORD=
“`

“`.env 修正後の環境変数の値
DB_CONNECTION=mysql
DB_HOST=test-db
DB_PORT=3306
DB_DATABASE=test_database
DB_USERNAME=test_root_user
DB_PASSWORD=test_password
“`
SQLSTATE[HY000] [2002] Connection refusedが発生する原因として、
– 環境変数の値が正しく設定されていない。
– config/database.phpと.envに記載されている環境

元記事を表示

今さらだけどLaravelのコンポーネントの整理

## はじめに
Laravelを使用し、画面をReact、Vueのようにコンポーネント対応ができるようになっているので、今一度整理しました。

1.レイアウトでのコンポーネントの使用($slotの使用)
2.1にコンポーネントの入れ込み
3.コントローラから画面のコンポーネントにデータセット

## 1.レイアウトでのコンポーネントの使用
`x-app-layout`コンポーネントを作成します。
このコンポーネントは、Bladeコンポーネントを作成し、テンプレートとして使用することで、アプリケーション全体のレイアウトを統一する目的で使用されます。

### `AppLayout` コンポーネントの作成

まず、`app-layout`コンポーネントを作成する必要があります。以下は、その手順です。

1. **コンポーネントファイルの作成**
`resources/views/components/app-layout.blade.php`に以下の内容を追加します。

“`app-layout.blade.html

【PHP】explode() と implode() どっちがどっちかわかりづらいよね。

どっちがどっちか曖昧でいつも使ってたので、今回整理しようと思いました。

結構、ごちゃごちゃになっている人多いはず…。

:::note warn
本記事は、`explode()` と `implode()`の解説記事ではありません。
:::

## 訳
### Explode
#### PHP公式
> 文字列を文字列により分割する。
文字列の配列を返します。
#### Google翻訳
> 爆発する

#### GPT4
> “explode” が「爆発する」という意味なので、文字列がいくつかの小さな部分に「分裂する」イメージ。文字列が爆発して小片に「バラバラになる」と覚えると良いでしょう。

#### 感想
結局整理してもしっくりこない。
どうにか落とし所を見つけたいですが、一旦`implode()`行ってみましょう。

### Implode
#### PHP公式
> 配列要素を文字列により連結する。
#### Google翻訳
> 爆裂する

#### GPT4
> “implode” が「内部崩壊」という意味なので、複数の小片が内部に引き寄せられて一つに「集まる」イメージ

元記事を表示

PHPのちょっとした問題集

# PHPエンジニアのためのWebサーバー基礎知識問題集
Webサーバーの仕組みやPHPの実行方式を理解することは、PHPエンジニアとしてパフォーマンスの高いWebアプリケーションを開発・運用する上で非常に重要です。この問題集を通して、WebサーバーとPHPに関する基礎知識を深め、実践的なスキルを身に着けましょう。

### 問題1: PHP実行方式の理解
PHPの実行方式には主に3つあります。それぞれを説明し、その利点と欠点を述べなさい。

Webサーバーの拡張モジュール:

PHPがWebサーバー(例: Apache)に直接組み込まれ、リクエストを処理する方式です。

:::note info
利点: 高速で設定が簡単です。
:::

:::note warn
欠点: セキュリティやスケーラビリティに課題があります。PHPのエラーがWebサーバー全体に影響を与える可能性があります。
:::

CGI(FastCGI):

各リクエストごとに新しいプロセ

元記事を表示

laravelで過去漏洩パスワードのバリデーションをかける

【前置き】
PwnedPasswordsというらしいですが、過去漏洩した記録を基に
入力した新しいパスワードを辞書索引し、
一致したらバリデーションとしてエラーを返し再入力を求めるというもの。
使っているLaravelのバージョンは6。

参考にした記事[Laravel de パスワードチェッカー](https://qiita.com/kyoya0819/items/3637cd4d0e7c5d48bb23)ではAPIで最新のデータと照合かけるみたいですが、なぜかあんまり精度が高くなく、[Pwned Passwords Validator for Laravel](https://github.com/valorin/pwned-validator)も同じく精度が低くセキュリティ的に通らなさそうなんでテストされるとわかってるjsonデータを元に対応。

#### 独自バリデーションルールをつくる

“`cmd:cmd
> php artisan make:rule SafePassword
“`
“`php:app\Rules\SafePassword.php

元記事を表示

OTHERカテゴリの最新記事