PHP関連のことを調べてみた2022年06月28日

PHP関連のことを調べてみた2022年06月28日
目次

laravel Mockeryを使ってテストを書く(外部APIアクセスをモック化)

# 概要

– laravelのUnitテストにて外部API実行関数の戻り値をMockeryを使って定義する方法を簡単にまとめる。

# ご注意

– 今回は汎用的にまとめようと思う。従って記事のコードをそのままコピペしても動作しないと思われる。

# 前提

– 下記の方法でMockeryのインストールを済ませておく。
– [laravel Mockeryを使ってテストを書く(インストール準備編)](https://qiita.com/miriwo/items/0f8fdf91177f6c3cb713)

# 方法

1. artisanコマンドを用いて任意のUnitテストのクラスを用意する。

“`terminal
$ php artisan make:test –unit FooTest
“`

1. UnitテストクラスのsetUp()関数内でモック化したい関数が所属するクラスを指定してテストダブルを定義する。

“`FooTest.php

元記事を表示

laravel Mockeryを使ってテストを書く(インストール準備編)

# 概要

– laravelの環境にMockeryをインストールして使えるところまで持っていく方法をメモ的にまとめる。

# 方法

1. 下記コマンドを実行してMockeryをcomposerでインストールする。

“`terminal
$ composer require –dev mockery/mockery
“`

1. composer.jsonを確認し、require-devにMockeryの情報が追記されていれば準備完了である。

“`composer.json
“require-dev”: {
“mockery/mockery”: “^1.5”,
}
“`

1. tinkerにて下記を実行し、エラーがでないことを確認する。

“`php
$mock = \Mockery::mock(‘foo’);
“`

# 参考文献

– [https://readouble.com/mockery/1.0/ja/index.html](https://readoubl

元記事を表示

PHP の static の種類,全部言えるかな?

## Q1

商品の在庫ごとに割り振られる連番の商品 ID を, PHP 上で自動採番するクラスを考えます。下記で使われている `static` に関して

– ? どういう役目を持っているでしょうか?
– ? どの PHP バージョン以降で有効でしょうか?
(但し,PHP 5.0 より前には遡りません)
– ? **出力される商品 ID はどうなるでしょうか?**

“`php
id = ++static::$counter;
}
}

class SpecialP

元記事を表示

【Laravel】論理削除(SoftDelete)採用時の注意点・検討事項

Laravelでは論理削除(SoftDelete)が割と簡単に実装できる。
しかし、いざ実装しようと思ったら注意 or 検討すべき点がいくつかあったのでメモ。

## Cascade

物理削除(完全削除)の場合、cascadeを設定しておけば、削除したレコードに紐づいているテーブルのレコードも一緒に消えてくれる。しかし論理削除の場合は消えてくれない。

もし紐づいてるテーブルのレコードも一緒に論理削除したい場合は、laravel-soft-cascadeというパッケージを使用する必要等がある。詳しくは以下記事様が解説してくださってます。

https://zakkuri.life/%E3%80%90laravel%E3%80%91ondeletecascade%E3%81%97%E3%81%A6%E3%82%8B%E3%81%AE%E3%81%AB%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E8%AB%96%E7%90%86/

 
## メールア

元記事を表示

【PHP】null処理方法の使い分け(isset、empty、is_null)

## はじめに
PHPにおけるnullの処理方法についてまとめたいと思います。

動機として、PHPには意外とnullを判定する方法が多く存在しているのですが、
落とし穴も多く、それぞれの方法をまとめ、使い分ける必要があるのではないかと考えました。
実務ではないのですが、PHPの開発でエラーが解決できずにハマってしまいました。

## 対象者
– 駆け出しエンジニア
– 入社1年半くらいまでのPHPer
– エンジニアではないが、PHPを最近始めた

かなり基本的なことで、公式のドキュメントに書かれていることをまとめたものになります。
ある程度経験のある人には、あまり面白い内容ではないと思われます。

## 本題
### null判定方法一覧
– `isset()`を使う
– `empty()`を使う
– `is_null()`を使う
– `$variable === null`

上記が挙げられると思います。
他にもこんな方法で`null`を判定できるよ!という方法があれば教えていただきたいです。

### isset()を使う
`isset()`は変数が定義されており、値が`nul

元記事を表示

【PHP8.2】true型が使えるようになる

PHP8.2で[false型とnull型が単独で使えるようになった](https://qiita.com/rana_kualu/items/2ef15cfa2dea8ba0f061)わけですが、こうなるとtrue型が存在しないのが片手落ちになってしまうわけですよ。

“`php
class Foo{
public bool $var1;
public false $var2;
public true $var3; // ←これだけ非対応
}
“`

ということでtrue型も実装しようというRFCが提出されました。

投票期間は2022/05/29から2022/06/12であり、賛成33反対0の全会一致で可決されました。
PHP8.2から使用可能になります。

以下は該当のRFC、[Add true type](https://wiki.php.net/rfc/true-type)の日本語訳です。

# PHP RFC: Add true type

## Introduction

PHPは、PHP8.2において[null型とfalse型を単独サポートする](https

元記事を表示

【Laravel】中間テーブルの定義でPivotを使った場合のBefore/After

## 環境
Laravel v9.5.1 (PHP v8.1.3)

>usersテーブル
id – integer
name – string

>rolesテーブル
id – integer
name – string

>role_userテーブル
user_id – integer
role_id – integer

## Pivotを使わない場合

“`Models/RoleUser.php
class RoleUser extends Model
{

public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}

public function role(): BelongsTo
{
return $this->belongsTo(Role::class);
}
}
“`

“`Models/User.php
class User extends Model
{

publ

元記事を表示

【PHP基礎⑲】配列-3.連想配列

[問題]
要素数5の整数型の配列を宣言し、すべての配列に対して順に入力された整数値を代入し、すべての要素の値を表示するプログラムを作成しなさい。

# コード
“`php
$a = [1,2,3,4,5];
foreach($a as $key => $m){
$a[$key] = intval(fgets(STDIN));
}
foreach($a as $i){
echo $i, PHP_EOL;
}
“`


「6
 3
 5
 7
 -2」   と入力

# 結果
“`
6
3
5
7
-2
“`

☆連想配列
・配列では、0番目、1番目…と番号(キー)が振られて、そのキーを指定することで要素を指定し取り出せた。
一方、連想配列では番号の代わりに名前をつけて要素を管理することができる。

$a = [‘りんご’ => ‘赤色’, ‘バナナ’ => ‘黄色’, ‘みかん’ => ‘オレンジ色’];
→$a[‘りんご’]とすれば、’赤色’を取り出せる。

・「=>」は「→」のような意味で、りんごは赤色のラベルのような感じ。
=>を使うことでキーと値をペ

元記事を表示

PHP の … (3点ドット, Three Dots) の種類,全部言えるかな?

下記で使われている `…` に関して
– ? シンタックスは,そもそも有効でしょうか?
– ? 有効である場合,どういう役目を持っているでしょうか?
– ? 有効である場合,どの PHP バージョン以降で有効でしょうか?

:::note warn
ヒント: 1つだけ,エラーになるものが含まれています!
:::

## Q1

“`php

回答

:::note success
**引数のアンパック** です。 PHP 5.6 以降で使用可能です。

– [… による引数のアンパック ¶](https://www.php.net/manual/ja/migration56.new-

元記事を表示

【PHP基礎⑱】配列-2.配列の初期化

[問題]
要素数10の整数型の配列を宣言し、整数値を入力させ、すべての配列の要素を入力値として、すべての要素の値を表示するプログラムを作成しなさい。

# コード
“`php
$a = [1,2,3,4,5,6,7,8,9,10];
$m = intval(fgets(STDIN));
$k = [];
foreach($a as $i){
$k[] = $m;
}
foreach($k as $r){
echo $r, PHP_EOL;
}
“`

↓「5」と入力

# 結果
“`
5
5
5
5
5
5
5
5
5
5
“`

☆配列の初期化
$k = [];

☆配列に新しい要素を追加する
$k[] = $m;
→キーを指定しない場合は、自動で整数のキーが付与される。
現在ある最大のキーに1を加えたものが与えられるが、キーが1つもない時は0から付与される。

元記事を表示

【Laravel】Class “Database\Factories\(モデル名)” not found

2,3回同じエラーで5分ほど無駄にしてるのでいい加減忘れないために備忘録として。

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況

テストを実行した際に下記のエラー

“`
Class “Database\Factories\Post” not found
“`

## 解決法

“`protected $model = Post::class;“`を追記したときの“`use App\Models\Post;“`の定義忘れが原因。
“`use App\Models\Post;“`を追記する。

“`php
namespace Database\Factories;

use App\Models\User;
use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;

class CardPointHistoryFactory extends Factory
{
protected $model = Post::class;

publ

元記事を表示

行数を節約するvar_dump()を書いてみた

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|

var_dump()で配列をダンプすると、やたらと行数が長い。`ob_start()`と`ob_get_clean()`で挟み込めばテキストが取れると聞いたので、行数をほぼ1/2にするものを書いてみた。引数は1つに限定。

“`php
function var_dump2($arg): void {
ob_start();
var_dump($arg);
$t = ob_get_clean();
$s = ”;
while (($n = strpos($t, ‘=>’)) > 0){
$s .= substr($t, 0, $n) . “=> “;
$t = ltrim(substr($t, $n + 3));
}
echo $s, $t, PHP_EOL;
}
“`
Userの配列を通常の`var_dump()`でダンプすると、以下の感じ。
“`
Sample.php:74:
array(

元記事を表示

HTMLファイルのフォームからPHPファイルに送信したとき、PHPのコードがそのまま表示されてしまう方へ(初心者から初心者へ)

これは初心者の自分がかなり苦戦した悩みです。同じ悩みを持っている方で助かる方がいてくれれば幸いです。

起こる問題

“`html:index.html

解決策

htmlファイルをブラウザで表示するときに、アドレスバーにlocalhostから入力して表示させましょう(これだけ:joy:)

自分はこの問題で5時間くらい悩みました。一人でも解決する方がいてくれれば!

元記事を表示

未経験の頃からよく目にしたり耳にしたりしてる「オブジェクト指向」について

# はじめに

未経験からweb系エンジニアになり今年で3年目。

プログラミングに興味を持ち勉強していた時から、
ネットで「オブジェクト指向」についての記事や、
スクールに通っていた時のメンターさんや友人から
「オブジェクト指向」が大事と、何度も耳にしてきたけど
果たしてその理解は当時からどれぐらい深まっているのか気になり、
この記事を書くことにしました。

# オブジェクト指向の3大要素

まずオブジェクト指向には3つの大きな要素がある

それが、継承と、ポリモーフィズムと、カプセル化

# 継承

![fig6-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285114/cb498371-db04-708d-23bb-4f36df9d1c3b.png)

継承は親クラスから機能を受け継ぐということ。

そのため、継承はクラス同士の関係が「AはBである」と表現できる時に
クラスを抽象的にまとめられるものということになります。

「パトカーは自動車である」
「救急車は自動車である」
「トラ

元記事を表示

【PostgreSQL】【PHP】接続方法

PHPとPostgreSQL間でのデータのCRUD処理について学んだため、備忘録に残します。

PHPは元々「[PostgreSQL関数](https://www.php.net/manual/ja/ref.pgsql.php)」が用意されているため、こちらを利用することになります。

# PHPからPostgreSQLデータベースへの接続方法:2つ
1. PHPのlibpqライブラリから提供されるPostgreSQL関数を使用する方法
2. PDO(PHP Data Objects)を使用する方法

どちらの方法を使うかの判断は機能的な比較というよりも、サーバー環境やプログラマの裁量によります。
分かりやすい例としては、PDOを使って他のデータベース(MySQLやSQLiteなど)を操作するコードを記述した経験のある場合は、PostgreSQLもPDOで扱う方がスムーズかもしれません。

一方で、他のプログラミング言語(PythonやRubyなど)で関数を使っての操作コードを書いた経験がある場合は、libpqライブラリの関数を使う形で書いた方が分かりやすいはずです。

接続方法につい

元記事を表示

Zabbix3.0から5.0へのアップグレード手順

仕事で使っているZabbix(あとphpも)を、いい加減アップグレードせんといかん、ということでZabbixのアップグレード方法をググって、検証してみた結果、以下の手順で成功したのでメモ。

# 現環境
– CenOS7
– apache2.4
– php5.6(remi)
– Zabbix3.0

※事前に下記に記載されているファイル、ディレクトリのバックアップを取っておきます。
https://www.zabbix.com/documentation/current/en/manual/installation/upgrade/packages/rhel_centos

# 1. Zabbix(サーバー側)のアップグレード

## 1-1. Zabbixサーバー(とエージェント)の停止
“`
systemctl stop zabbix-server
systemctl stop zabbix-agent
“`

## 1-2. php5.6をアンインストール
“`
yum remove php-* \
oniguruma5php \
gd3php
“`

## 1-3. r

元記事を表示

PHP7.4で、OPcacheをインストールしてみる

|[../](https://qiita.com/taconana/items/d382d08a83a2a67f3b6a) |
|—|

OPcacheは、PHPの処理を高速にするため、コンパイル済みのバイトコードをキャッシュする。PHPのコードの解析・解釈をスキップすることができ、高速化が図れる。

OPcacheは、標準でインストールされているようだ。

“`
# dnf list php-opcache
php-opcache.x86_64 7.4.19-2.module_el8.6.0+1075+ab70be85 @appstream

# vi /etc/php.d/10-opcache.ini

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000

# systemctl restart nginx
“`
OPcacheは、標準でインストールされ、既に有効化されていた。既に機能してくれていたんだ!

元記事を表示

WordPressでの「gd がインストールされていないか、無効化されています」の対応

|[../](https://qiita.com/taconana/items/d382d08a83a2a67f3b6a) |
|—|

WordPressのダッシュボードを見ると、サイトヘルスにいくつかエラーやワーニングが出ていたので対応した。特に「必須モジュール gd がインストールされていないか、無効化されています」は、致命的なエラーになっていた。

## 必須モジュール gd がインストールされていないか、無効化されています!

これは、php-gdをインストールすれば解決した。
“`
# dnf install php-gd

# vi /etc/php.d/20-gd.ini
; Enable gd extension module
extension=gd

# systemctl restart nginx
“`

## オプションのモジュール imagick がインストールされていないか、無効化されています!

これはWarningのようだ。ImageMagickのインストールはちょっと面倒。gccとmakeを入れてコンパイルしないといけない。作成されたi

元記事を表示

【PHP】【JavaScript】PHPで簡易WebAPI作成 〜 JavaScriptで取得しブラウザに表示させるまで

バックエンド:PHP
フロントエンド:JavaScript
で開発する場合に、つなぎ込みの部分がよく分かっていなかったため学習して備忘録として残しました。
つなぎ込みの部分の理解が目的であるため、APIの内容はかなりシンプルです。

# ① 簡易WebAPIの実装

“`php:api.php

元記事を表示

【Laravel9】Policyを使って認可を与える

## Laravelで認可を与える方法
大きく2つの方法があり、`Gate`を使う方法と`Policy`を使う方法がある。

### Gate
特定のモデルに関連していないユーザーのアクションに関してアクセス制限を行う。

### Policy
ある特定のモデルに対して行うアクションに関してアクセス制限を行う。
※今回はこちらのPolicyを使って行う

## 前提
– Userモデル、Postモデルは既に作成している
– laravel9

## PostPolicyファイルを作成する

“`
$ php artisan make:policy PostPolicy
Policy created successfully.
“`
`make:policy`コマンドは、空のポリシークラスを生成する。
リソースの表示、作成、更新、削除に関連するポリシーメソッドのサンプルを含んだクラスを生成する場合は、
下記のようにコマンドの実行時に–modelオプションを指定する。

“`
$ php artisan make:policy PostPolicy –model=Post
Po

元記事を表示

OTHERカテゴリの最新記事