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

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

PHP で計算すると起こるわかりにくい現象

# これは何?

64bit 環境では、PHP の整数型が 64bit であることを知って驚いたので、そこに起因する不思議なことを見ていく。

# 基本的な動き

PHP は、整数を整数で割ると、整数じゃなくなることがある。

“`php:PHP8
10.000000/8.000000=1.250000
“`

そして、JavaScript と異なり、型も変わる。

“`php:PHP8
integer/integer=double
“`

さらに。
除算結果が整数だと型は double にならない。

“`php:PHP8
10.000000/2.000000=

元記事を表示

Laravel8 personal_access_tokens のマイグレーションを無効化する

## Laravel 8.6.0 以降、Laravel Sanctumがなぜか標準搭載

– https://github.com/laravel/laravel/pull/5663
– https://github.com/laravel/laravel/releases/tag/v8.6.0

Laravel9にも `laravel/sanctum` がプリインストールされています。

– https://github.com/laravel/laravel/blob/9.x/composer.json

(なんでなん…?)

## マイグレーションファイルを消してもテーブルが生成される

https://github.com/laravel/laravel/blob/9.x/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php

Laravelをインストールすると `database/migrations/2019_12_14_000001_create_personal_a

元記事を表示

formタグだけじゃない$_POST

formタグにおいてpostメソッドを指定するとフォームに入力された値が連想配列としてPHP $_POSTで使用出来るというのがこれまでの理解でした。

今回jQueryのAjaxでもPOST送信が出来て、PHP $_POSTで使用可能と学んだので備忘録とします。

“`Javascript
$.ajax({
url: ‘xxxxxx’,
type: ‘post’
data: {‘fruits’: apples},
})
“`
上記の場合宛先となるurl(‘xxxxxx’)にdata(‘fruits’: apple)をPOST送信することができ、
PHPでecho $_POST[‘fruits’]する事でapplesが出力されます。

元記事を表示

【PHP】PHP5でusortの比較結果が等しくなる要素の時に配列の並び順が変わってしまう

# 結論
usortの比較結果が等しくなる時(callbackが0を返す時)は配列の順番は変わらないと思っていたがPHP5ではそれが変わってしまう。
※公式ではPHP8.0.0より前のバージョンで起こるとのこと。

https://www.php.net/manual/ja/function.usort.php

# 試したこと

## 検証コード
“`php
$vals = [‘first’, ‘second’, ‘third’];

usort($vals, function($a, $b) {
return 0;
});

print_r($vals);
“`

## 期待した出力
“`php
Array
(
[0] => first
[1] => second
[2] => third
)
“`

## 実際の出力
“`php
Array
(
[0] => third
[1] => second
[2] => first
)
“`

# PHPのどのバージョンから並び順が変わるかを確認した
[3V4L](htt

元記事を表示

パスワードのテストでHash::check()がtrueを返し続けた件。

“`
$this->assertTrue(Hash::check($password, User::latest()->first()->password));
“`

なぜ?あぜ?と思ったが、原因は、

“`
User::latest()->first()->password;
“`
で、最後のレコードが取れていないことが原因だった。というのもテストでは複数のレコードにおいてcreate_atの時間が同じになるので、結果、一番最初のレコードが取れてきてしまっていた。

で、解決策はこれ。

“`
$this->assertTrue(Hash::check($password, User::all()->last()->password));
“`
これで、最後のレコードのパスワードがとれるようになった。めでたしめでたし。

元記事を表示

Composerとは

ライブラリ依存管理ツール。
PHPで開発するにあたって、便利なライブラリやフレームワークをまとめてインストールできる。
よって、開発者がひとつひとつインストールしなくても、同じ環境を再現できる。

# インストール方法
ターミナルからDownload Composerのコマンドを入力
https://getcomposer.org/download/

# 実行パスが通るように`composer.phar`を移動する
`ほにゃららパスcomposer`とかかなくても`composer`で実行できるよう移動する
`sudo mv composer.phar /usr/local/bin/composer`

# 動作確認
`composer -V`

# 参考サイト
https://hirooooo-lab.com/development/install-composer/

元記事を表示

PHP fainal定義

# finalメソッド・final定数
PHPにおいて、finalで定義されたメソッドや定数は子クラスから上書きできない。

“`php

元記事を表示

【PHP】ファイル操作系いろいろ

# basename() ファイルパスからファイル名を取得する。
参考:http://www.openreference.org/articles/view/496
“`php:basename
basename( “/tmp/file/hoge.txt” ); // => “hoge.txt”
basename( “/tmp/file/hoge.txt”, “.txt” ); // => “hoge”
basename( “/tmp/file/ ); // => “file”
“`
# rename() ファイルを移動する。
参考:https://www.flatflag.nir87.com/copy-895
“`
dir
├─ tmp
│ └─ hoge.txt =>これをfileに移動したい。
└─ file
“`

“`php:rename
rename(‘tmp/hoge.txt’, ‘file/hoge.txt’);
“`

# unlink() ファイルを削除する。
参考:https://www

元記事を表示

【PHP/継承】クラス内のpublic変数宣言はコンストラクタより先に行われているのだった

PHPのライブラリの継承ラッパーを作っていて認識違いでハマったのでメモ。

# 状況
例えばこんなライブラリがあり。
基本的にはライブラリ内のコードには手を出したくないので、ここには調整は入れませんが、
デフォルトで $hensuu という変数が存在(ここでは宣言のみ)しています。

“`php:Library.php
class Library_sample {

var $hensuu;

public function test(){
//なんやかんや
}

}
“`

で、それを継承するラッパークラスを作りました。

“`php:Hoge.php

class Hoge extends Library_sample{
public $hensuu = true;
public $hensuu2 = true;

public function __construct()
{
parent::__construct();

}

“`

このラッパークラス「Hoge」で変数、$hensuuにtrueをセットしています。
ついでに

元記事を表示

LIKEをbindしようとしたら二度怒られた。

# LIKE検索をPHPからしたい。
bindなんたら~でLIKEを書いたら怒られた。
“`php:おこられた書き方.php
$sql = “select * from table where hoge like %:value% “;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(“:value”, $value, PDO::PARAM_STR);
“`
# え、これも違うのか。
文字列扱いだからクォーテーションがいる!とか思った。
“`php:こりてない書き方.php
$sql = “select * from table where hoge like ‘%:value%’ “;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(“:value”, $value, PDO::PARAM_STR);
“`
# %も変数に入れてください?
すみませんでした。。。
“`php:ごめんね.php
$sql = “select * from table where hoge like :v

元記事を表示

Laravel AmazonSNSでSMS送信

こちらの記事を参考にしています。AWSの設定は省きます。
https://codeeee.net/posts/laravel-amazon-sns-send-sms

AWSのパッケージをcomposerでインストール。
“`
COMPOSER_MEMORY_LIMIT=-1 composer require aws/aws-sdk-php-laravel
“`

プロバイダ追加
“`php:config/app.php
‘providers’ => [
//…
Aws\Laravel\AwsServiceProvider::class,
],
“`

コマンドで設定ファイルを作成
“`
php artisan vendor:publish –provider=”Aws\Laravel\AwsServiceProvider”
“`

以下にファイル設定が作成される
“`php:config/aws.php
‘credentials’ => [
‘key’ => env(‘AWS_ACCESS_KEY_ID’, ”),

元記事を表示

Laravel 共通関数作成

コントローラー等で使いたい共通関数の作成方法。
app/ 直下にフォルダを作成しその中にファイルを作成。今回はLibraryフォルダを作成した。

“`php:app/Library/Hoge.php
App\Library\Hoge::class,
“`

コントローラーから呼び出し
“`php:app/Http/Controllers/UserController.php
\Hoge::huga();
“`

元記事を表示

PHP 今更ながらオブジェクト指向を自分自身に向けて解説してみた ~基本編~

# 概要

– かなり前に下記のような記事を記載したが、まとめただけでちゃんと理解できていなかった気がするのでもう一度記載する。
– [PHP Laravel オブジェクト指向 用語集](https://qiita.com/miriwo/items/974adcee45f699553cd4)

# 前提

– 下記サービスを用いて検証を行った。
– [https://paiza.io/](https://paiza.io/)

# 内容

### クラス

– オブジェクト指向の説明でよく「設計図」と言われるもの。
– 設計図と言われるけどそんなにたいしたものではなく、中に関数とか変数とかを入れておいて使い回せるようにしたものである。
– 基本的に一個の.phpファイルに一個のクラスを記載する。
– .phpファイルのファイル名はクラス名と一致させる。
– わかりにくくなるため推奨はされないが一個の.phpのファイルに複数のクラスを定義することもできる。
– 下記のように定義する。(クラス名はパスカルケースで記載する)

“`php

元記事を表示

laravel学んで2か月で自サービスを開発した話 Part10

qiitaの草を増やした結果、githubの草が除草されました私です

胡蝶蘭を捨てるくらいならワイが欲しいので、サービス開発する編
公式ドキュメントの言う通り、パッケージをインストールされたら、Inertia.jsが導入されて???になった編
マルチログインを作ってみた編
デザインをtailwindcssに丸投げする編
Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件

LaravelでAPI作成のした際にルーティングでroutes/api.phpに記載すると /api/〜になってしまう。

/api部分を無くすためには以下を削除すればいい。

“`php:app/Providers/RouteServiceProvider.php
Route::prefix(‘api’) //prefixを削除
->middleware(‘api’)
->namespace($this->namespace)
->group(base_path(‘routes/api.php’));
“`

これと同じ挙動でweb.phpなどでも活用できる
“`php:
Route::prefix(‘user’)->group(function () {
Route::post(‘/’, ‘App\Http\Controllers\UserController@index’);
Route::post(‘create’, ‘App\Http\Controllers\UserController@create

元記事を表示

Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスできない(nginx / Docker / Zend Framework 3)

諸事情で Zend Framework を初めて学習中の西暦2022年。Zend Framework公式ドキュメントのtutorialを元にハンズオン学習している。

## 1. やりたいことを確認する。

– Zend FrameworkのWelcomeページは http://localhost/ もしくは http://localhost/application/index にアクセスするとWelcomeページが表示されるようにルーティングを設定できるようになっており、そのようなに表示されるようにしたい。
– 開発環境の構築にDockerを利用しており、下記の構成にしている。(Zend Framework の公式ドキュメントでは、Webサーバは Apache が使用されており、 nginx についての記述はない。)

| Dockerコンテナ | Dockerイメージ | 備考 |
| — | — | — |
| web | nginx:1.18.0-alpine | |
| app | php:7.4.19-fpm-

元記事を表示

【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき

### エラー状況
:::note alert
Laravelでページネーション機能を導入したが
下記画像のように、上手くページ番号が表示されない。
:::

![スクリーンショット 2022-03-09 21.47.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525372/259b6878-c445-e433-ae24-91168090b89d.png)

ページネーション導入はこちらの記事を参考しました!

https://leben.mobi/blog/laravel8_pagination/php/

https://biz.addisteria.com/laravel8_pagination/

### 何が原因だったか

“`CSS“`が反映されていないことが原因です。
では、CSSを見てみました。

![スクリーンショット 2022-03-09 21.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

macのPHPのバージョンを8.1にアップデートする

# PHPを8.1にバージョンアップしたい
先月Laravel9がリリースされ、PHPのバージョンが8.0以上必要になりました。
ついでに8.1からはEnum型なども導入され、いろいろ変化してるみたいですね。
macOSにはもともとphpが入っていますが、手元の環境では7系だったのでHomebrewを用いてインストールしたいと思います。

## バージョン確認

デフォルトではv7.3が入っていました。
“`sh
% php -v
WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.24-(to be removed in future macOS) (cli) (built: Jun 17 2021 21:41:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine

元記事を表示

ポートフォリオとして、PDCA管理のアプリを作成しました。

# はじめに
### 記事の目的
ポートフォリオとして作成したWebアプリケーションの紹介記事です。

注:PDCAとは

https://cicou.under.jp/myPDCA/login.php

# アプリの概要

# 機能
### 登録
### 一覧
### 編集
### 削除
# 使用技術
### バックエンド
– PHP
### フロントエンド
– HTML
– CSS
– bootstrap
### データベース
– MySQL
### デプロイ

# 工夫した点
### 見やすさ
# 最後に

https://cicou.under.jp/myPDCA/login.php

元記事を表示

ADRパターン

# ADRの概要
– Action-Domain-Responder
– ソフトウェアアーキテクチャパターンの1つ
– MVCの改良版

# MVCと違うところ
1つのアクションに対して、そのリクエストからレスポンスを定義する。

## MVCの場合
例えばMVC実装だと、1つのコントローラーに
– index
– insert
– update
– delete

などアクションを複数定義する。

## ADRの場合
1クラス1アクションにより
– シンプルなリクエスト→レスポンスの流れ
– 1クラスの責務が明確

# 構成
## Action
リクエストを受け取り、ドメインの処理結果をレスポンダに渡す

## Domain
必要な処理を行い結果を返す
ビジネスロジックはここに含まれる

## Responder
ドメインの処理結果を受け取り、必要な準備を行いレスポンスを返す

# 実装例
PHP/Laravel

## Actionクラス
– Controllerクラスを継承
– コンストラクタでドメインオブジェクトとレスポンダオブジェクトを注入
– レスポンダに渡す処理をinvo

元記事を表示

OTHERカテゴリの最新記事