- 1. PHPエンジニアがよく疑問に感じること
- 2. PHP-クラス-クラスメソッド
- 3. 【ノート】PHP foreach文
- 4. PHP-クラス-インスタンス不要で利用できるクラス内の変数
- 5. GitList-2.0.0をUbuntu24.04で動かしてみる
- 6. Dockerが近年その優位性を失いつつある理由
- 7. カスタムホスト名に” _ “(アンダースコア)を使わないようにしている理由
- 8. PHP-クラス-コンストラクタ
- 9. PHPのリファレンスとCのポインタの違い
- 10. 【Laravel】XServerでメールをJobで送信するようにする
- 11. 【Laravel】csvの全項目をダブルクォーテーションで囲む方法!
- 12. SOLID原則とは? ~後編 I・D の2原則について解説~
- 13. 【超初心者】クラス-メソッドと疑似変数$this
- 14. PHP 8.4 初のリリース候補がリリース!新しいPHPリリースサイクル戦略が採用されました
- 15. 【PHP】use宣言のグループ化
- 16. 【PHP】演算子の優先順位
- 17. 【Laravel】モックでzipファイルを返却する方法!
- 18. 【PHP8.4】プロパティに非対称な可視性を設定できるようになる
- 19. pgAdminでアカウントロックされたときの対処法
- 20. PHPにおけるメモリ使用量の計測とログ出力
PHPエンジニアがよく疑問に感じること
PHPエンジニアがよく疑問に感じる点には、以下のようなものがあります:
# 1. 一貫性のない関数名:
PHPの標準関数には命名規則の一貫性がないものがあります。例えば、`strpos()`と`str_replace()`のようにアンダースコアの有無が統一されていません。## 理由:
1. 歴史的な経緯:
PHPは1995年に個人プロジェクトとして始まり、急速に発展しました。初期の段階では一貫した命名規則が確立されておらず、関数名が場当たり的に決められていたことがあります。2. 後方互換性の維持:
既存のコードを破壊しないために、古い命名規則の関数を残しつつ、新しい命名規則を導入せざるを得ませんでした。3. 複数の開発者の関与:
PHPの発展過程で多くの開発者が関わり、それぞれが異なる命名規則を持ち込んだ可能性があります。4. C言語の影響:
PHPは初期にC言語の影響を強く受けており、C言語風の命名規則(アンダースコアなし)と、より読みやすい命名規則(アンダースコアあり)が混在しています。5. 機能の追加と拡張:
新しい機能や拡張が追加される際に、既存の命名規
PHP-クラス-クラスメソッド
# はじめに
SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。https://sls.ideal-growth.jp/12/lesson/313/learning
## メソッドの種類
PHPでは クラスメソッド と インスタンスメソッド という2種類のメソッドがあります。
1. インスタンスメソッドは、インスタンス生成後にアクセスが可能なメソッドです。**インスタンス毎に引数を代入する為、それぞれのメソッドで値が異なります。**
1. クラスメソッドはインスタンスを生成せずにアクセスが可能なメソッドです。**クラス自体に紐づく為、インスタンスに関わらず共通の処理を行います。**クラスメソッドを実行するには、クラスの中からと外からで書き方が違います。
### クラスメソッドをクラス外から実行する
“`PHP
class Customer
{
// クラスメソッドの定義
public static function sayHello() { // アクセス修飾子に続けて static を記述
echo “Hello\n”
【ノート】PHP foreach文
“`PHP:foreach文
foreach(配列 as 各要素の添え字が代入される変数 => 各要素の値が代入される変数){
繰り返したい処理
}
foreach($numbers as $key => $value){
echo”添え字”. $key. “番は”;
echo $value. “です。
“;
}
“`:::note info
チェックボックスとの関係
チェックボックスからデータを送る場合、選択されたものを配列として送るのでforeach文で処理する。
:::
PHP-クラス-インスタンス不要で利用できるクラス内の変数
# はじめに
SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。https://sls.ideal-growth.jp/12/lesson/312/learning
## プロパティの種類
PHPでは クラス変数 と インスタンス変数 という2種類のプロパティがあります。
1. インスタンス変数は、インスタンス生成後にアクセスが可能なプロパティです。**インスタンス毎に紐づけて値を保持する為、それぞれのオブジェクトで値が異なります。**
1. クラス変数はインスタンスを生成せずにアクセスが可能なプロパティです。**クラス自体に紐づけて値を保持する為、インスタンスに関わらず共通の値が適用されます。**### サンプルソース
変数名など一部変更しています。“`PHP
class User
{
// クラス変数はアクセス修飾子の記述に続けて、static キーワードを用いて定義
public static $userCount = 0; // 変数には値をセットしておく必要ありpublic function countUp()
GitList-2.0.0をUbuntu24.04で動かしてみる
# 概要
– GitList というのは、Linuxサーバー上にある プライベートなGitリポジトリをWebインターフェースを通してソースコードや差分、コミット履歴をブラウジングするCGIです。
https://github.com/klaussilveira/gitlist– PHPで書かれています。
– 類似のものに GitWebとかWebSVNとかありましたけれど、それらは PerlのCGIです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28186/65b5b5e2-3536-141d-bdea-daff919bc9c6.png)
# 前提
– Ubuntu24.04 + Apache2 + PHP8.3 で動かしてみます。
– もちろん Gitはインストール済、Gitリポジトリはローカルファイルとして存在。# 動かし方手順
– ソースコードリポジトリではなく、以下のURLから TarBallを取得します。
https://github.com/k
Dockerが近年その優位性を失いつつある理由
近年、Dockerは開発分野で一世を風靡し、その革新的な技術でソフトウェア開発を革命的に変えました。当初、Dockerは軽量なコンテナ化技術を通じて開発とデプロイメントプロセスを大幅に簡素化しました。しかし、2024年にはこの技術の欠点が次第に明らかになってきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906219/7acca44a-6044-3325-3e22-62764446a6c4.png)## 初期の栄光
それほど前のことではありませんが、Dockerは「私のマシンでは動くが、あなたのマシンでは動かない」という古くからの問題をうまく解決しました。そのポータビリティと互換性により、アプリケーションを異なる環境に簡単に移行できるようになりました。しかし、これらの利点は徐々に時とともに影を潜めてきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906219/
カスタムホスト名に” _ “(アンダースコア)を使わないようにしている理由
# 先に結論
PHPで**filter_var**を使ってURLサニタイズをすると、**アンダースコアは不正URLとして弾かれてしまう**ため。
代わりに**ピリオド**などを使うのが正しい。
## 経緯
WordPressを使って、リダイレクト機能の実装を行っていました。
サニタイズについて知らなかった頃、慣習としてディレクトリ名と同じカスタムホスト名を付けて、ローカル環境で使用していました。“`
http://example_project
“`この環境下であることを前提に、以下のような関数を実行します。
“` redirect.php
function custom_redirect_sanitize_url($rules) {
$sanitized_rules = [];
$rules = json_decode($rules, true);foreach ($rules as $key => $value) {
if (filter_var($key, FILTER_VA
PHP-クラス-コンストラクタ
# はじめに
SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。https://sls.ideal-growth.jp/12/lesson/311/learning
## クラス-コンストラクタ
PHPでは、`__construct`(コンストラクタ) というメソッドを実装することで、インスタンス生成時に処理を実行することができます。
自由に名前が付けられないので、決まった呪文みたいなものだと覚えておきましょう。### 注意点
* `__construct` 以外の命名はできない(アンダーバーは2つ)
* 呼び出されるタイミングはインスタンス生成時(クラスの外で`new`をした時)
* `return`文の使用はできない### サンプルソース
変数名など一部変更しています。“`PHP
class Person
{
public $name;
public $age;// コンストラクタの定義
public function __construct($name, $age)
{
echo
PHPのリファレンスとCのポインタの違い
PHPのリファレンスとCのポインタには、以下のような主な違いがあります:
## 概念の違い
– PHPのリファレンスは、同じ変数の内容を異なる名前で呼び出すための仕組みです。
– Cのポインタは、メモリ上のアドレスを直接扱う仕組みです。## 機能の違い
– PHPのリファレンスでは、ポインタ演算やメモリアドレスの直接操作はできません。
– Cのポインタでは、アドレス計算や低レベルのメモリ操作が可能です。## 実装の違い
– PHPのリファレンスは、シンボルテーブルのエイリアス(別名)として機能します。
– Cのポインタは、実際のメモリアドレスを格納します。## 使用方法の違い
– PHPでは、変数名の前に「&」をつけてリファレンスを作成します。
– Cでは、「*」を使用してポインタを宣言し、「&」でアドレスを取得します。## オブジェクトの扱い
– PHPでは、オブジェクトはデフォルトで参照渡しされます。
– Cでは、オブジェクトのポインタを明示的に扱う必要があります。## 安全性
– PHPのリファレンスは、Cのポインタに比べて安全性が高く、メモリ管
【Laravel】XServerでメールをJobで送信するようにする
# はじめに
こんにちは、エンジニアのkeitaMaxです。
Xserverでメールを送る処理を作成したいと思った時の話です。
本当はSupervisorで動かしたかったのですが、XServerだと動かすことができなさそうだったので困った話です。
Lravael10を使用しました。
# 実装方法
XServerのCronを設定して、Laravelのスケジューラを動かし、
スケジューラに設定してあるqueueを動かす+リスタートするバッチを動かすようにします。# XServerのCron設定
まずXServerのCron設定からCron設定追加をします。
毎分動かすようにするので以下のようにします。
![スクリーンショット 2024-10-08 22.07.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/d87c3f86-24fa-00d6-e680-b45b025ed874.png)
“`
cd /home/xxxxxxxx/hack/src && /us
【Laravel】csvの全項目をダブルクォーテーションで囲む方法!
泉([@izumin_0401](https://twitter.com/izumin_0401))です。
今回は、Laravelでcsvの全項目をダブルクォーテーションで囲む方法を解説しやす!
:::note info
今回は、便利なので「League/Csv」というライブラリを使います。よろしくっす!
:::# ブログ記事はこちら
https://traveler0401.com/laravel-csv-enclosure-double/
# 【Laravel】csvの全項目をダブルクォーテーションで囲む方法
“`php
use League\Csv\Writer;class CsvService
{
public function exec()
{
$csv = Writer::createFromString(”);$csv->forceEnclosure(); // ダブルクォーテーションで囲む
$csv->insertOne($header);
$csv->inser
SOLID原則とは? ~後編 I・D の2原則について解説~
# SOLID原則とは?
**オブジェクト指向における設計原則のこと**
以下の5つの原則の頭文字をとったものです。
1. 単一責任の原則(**S**ingle Responsibility Principle)
2. オープン・クローズドの原則(**O**pen-Closed Principle)
3. リスコフの置換原則(**L**iskov Substitution Principle)
4. インターフェース分離の原則(**I**nterface Segregation Principle)
5. 依存性逆転の原則(**D**ependency Inversion Principle)今回は後編として I, D の2原則をご紹介します!
https://qiita.com/gaky1201/items/1e8eed57b7c8a203f509
## 4. インターフェース分離の原則(**I**nterface Segregation Principle)
**インターフェースによって使用しないメソッドへの依存をさせてはならない。**
という原則になります。
【超初心者】クラス-メソッドと疑似変数$this
# はじめに
SLスタジオでPHP・WEB開発を独学中のアラフィフ主婦の忘備録です。https://sls.ideal-growth.jp/12/lesson/310/exercise/991
## クラス-メソッドと疑似変数$this-
### 処理内容
MathOperationクラスに定義されているaddメソッドを呼び出す。addメソッドの引数には、それぞれプロパティの値とprocessメソッドに渡された引数の値を使用する。### 解答・解説 のサンプルソース
変数名など一部変更しています。“`PHP
class MathOperation
{
public $value = 10;function add($value1, $value2)
{
echo $value1 . ‘ + ‘ . $value2 . ‘ = ‘ . ($value1 + $value2) . “\n”;
}// process メソッドを追加
function process($value)
{
PHP 8.4 初のリリース候補がリリース!新しいPHPリリースサイクル戦略が採用されました
## RC1 リリース
![PHP 8.4 RC1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s5xgqth1q49i73agg14w.png)
PHP 8.4の初のリリース候補(RC1)がリリースされました。PHP 8.4-RC1は、PHP 8.4リリースサイクルにおける重要なマイルストーンであり、[PHP開発](https://support.servbay.com)ブランチから分岐し、機能凍結状態に入ります。
これ以降、PHP 8.4ブランチは公式リリース(GA)に向けてバグ修正のみを受け付けることになります。公式リリースは2024年11月21日に予定されています。初のGAバージョンであるPHP 8.4.0の前に、さらに3つの候補(RC2、RC3、RC4)がリリースされる予定です。
PHP 8.4は、新しいPHPリリースサイクル戦略を採用した最初のバージョンです。**2年間のアクティブサポート**の後に**2年間のセキュリティ更新**を受ける予定です。
## 新しいPHPリリースサイクル戦略
【PHP】use宣言のグループ化
### Before
“`php
【PHP】演算子の優先順位
変数`$hoge`が`null`だったら`true`を返したい処理を書いてたとき、
演算子の優先順位で少し詰まったので、備忘録として残します。“`php
$hoge = null
return (bool) $hoge ?? true;
“`これはtrueが返りそうですがfalseが返ります。
実は型キャスト演算子は、優先的に処理される部類の演算子です。
PHPのリファレンスによると、型キャスト演算子 → null合体演算子の順で評価されます。
[PHP: 演算子の優先順位 – Manual](https://www.php.net/manual/ja/language.operators.precedence.php)なので、null合体演算子 → 型キャスト演算子の順で評価したいのであれば、
括弧でグループ化してあげて、以下のように優先順位を決めます。
“`php
$hoge = null
return (bool) ($hoge ?? true); // true
“`
【Laravel】モックでzipファイルを返却する方法!
泉([@izumin_0401](https://twitter.com/izumin_0401))です。
今回は、Laravelのモックでzipファイルを返却する方法を解説します!
# ブログ記事はこちら
https://traveler0401.com/laravel-mock-zip/
# 【Laravel】モックでzipファイルを返却する方法
“`php
public function mock()
{
$zip = new \ZipArchive;
$zip_path = tempnam(sys_get_temp_dir(), ‘zip’);if ($zip->open($zip_path) === true) {
// zipファイルにcsvファイルを入れてみる
$csv = implode(“\n”, [
‘id,name’,
‘1,izumi’,
]);
$zip->addFromString(‘sample.
【PHP8.4】プロパティに非対称な可視性を設定できるようになる
PHP8.4で新潟アクセス修飾子が正式採用されました。
なにそれ?
“`php
class Foo
{
public private(set) string $bar = ‘baz’;
}$foo = new Foo();
echo $foo->bar; // OK
$foo->bar = ‘qux’; // エラー
“`読み込みはpublic、書き込みはprivateなプロパティ、通称新潟アクセス修飾子です。
新潟という名前は[大昔にネタでなされた命名](https://rti7743.hatenadiary.org/entry/20100520/1274309263)で、『読めるけど書けない』の例として槍玉に挙げられたというわけです。PHP8.1で似たような`readonly`という修飾子が[導入された](https://qiita.com/rana_kualu/items/ae96400a0a6981eca64a)のですが、これは『最初の一回だけ書き込めるけど、一度書き込むと二度と上書きできない』というものであり、実は新潟アクセス修飾子の定義
pgAdminでアカウントロックされたときの対処法
# 前提
+ **Docker Desktopを使用して**localでプロジェクトを立ち上げている。
+ DBにはデータは0だったので初期化されているかどうか分からない。
:::note warn
今回のケースはたまたま上手くいっただけかもしれません。公式では別の方法が記載されていますので不安な方は下を参照してください。
:::
[「pgAdmin アカウントのロック/復元」](https://www.pgadmin.org/docs/pgadmin4/latest/restore_locked_user.html “タイトル”)
## なぜこうなったか
アカウントパスワードを3回以上間違えたから。
初心者なので何が起きたか理解するのに10分かかりました…## 方法
### 1. Docker Desktopを立ち上げる。
※プロジェクト自体は立ち上げなくて良い。### 2.”Volumes”を選択
![スクリーンショット 2024-10-07 16.05.37.png](https://qiita-image-store.s3.ap-northeast-1.amazona
PHPにおけるメモリ使用量の計測とログ出力
PHPでメモリ使用量を計測し、処理前後でその変化をログに記録する方法を解説します。
パフォーマンスを監視し、リソースの無駄遣いを防ぐ際に役立ちます。## メモリ使用量の計測に使用する関数
PHPには、現在のスクリプトのメモリ使用量を取得するための関数がいくつか用意されています。その中でも、よく使われるのが memory_get_usage() です。この関数は、メモリ使用量をバイト単位で返してくれます。### `memory_get_usage` の使い方
“`php
$memoryUsage = memory_get_usage();
“`
これで、スクリプトが使用しているメモリのバイト数が取得できます。また、memory_get_usage(true) と引数に true を指定すると、システムに割り当てられたメモリ(未使用分も含む)を取得できます。## メモリ使用量をメガバイト単位で取得する
memory_get_usage() はバイト単位の数値を返しますが、メガバイト(MB)単位に変換した方が見やすいです。なので、1024で2回割ります。“`php