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

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

【PHP8.1】PHP8.1はPHP7.4より20%高速化している

MLに[Automatic performance benchmarking: PHP 8.1 is ~30% faster than PHP 7.4](https://externals.io/message/116323)という投稿があったので紹介してみます。

# https://externals.io/message/116323

## kocsismate90

最近PHP用の自動ベンチマークフレームワークを作ってるんだけど、その宣伝に来たよ。
最初は[is_literal](https://wiki.php.net/rfc/is_literal)のRFCの性能評価に使ったんだけど、その後多くの問題を修正して新機能も追加したよ。

昔[インテルが行った自動ベンチマーク](https://externals.io/message/89843#89843)を覚えてる人もいるかもしれない。
私はこのプロジェクトに刺激を受け、そして今同じようなことをやっているけど、さすがに彼らほど高度なことはできなさそう。

今作っている[php-version-benchmarks](http

元記事を表示

システム設計の原則を読んだことで実装についても考えるようになった話

## 初めに
初めて保守の案件を任されたときのサービスは
5年以上続いているものでした。
LaravelとPHPで構築されています。
初めてということもありソースコードを見たときは
僕自身の理解力が足りなくて難しく見えているだけだと思っていたのですが
徐々に知識がついてきて
割とクソコードなんだなと思うようになってきた。
だけどそんなクソコードに対してどうにかしたいという気持ちはあっても
何をしたらいいのかもわからずただただ思うだけで過ごしていました。
そんな状態で過ごしているときに @MinoDriven さんとお話しする機会があり
そこから設計について改めて学びたいなと思い
[「現場で役立つシステム設計の原則」](https://amzn.to/3JyP7QL)
を読んでみて眼からうろこが出続けてしまったので
みんなにも同じように体感してほしいと思ったので纏めました。
僕自身の解釈、表現をしているので書籍が伝えたいこととは違うように
伝わるかもしれませんので正しい情報はしっかりと書籍を読むことをお勧めします。

## 「実装ができる」だけは自己中な状態
僕自身は異業種からプログラマ

元記事を表示

??【最速】フロントエンドエンジニア向けLaravel入門ガイド【API特化】

# 記事の概要
Laravelを使ったAPIの建て方を学べます。**質はともかく、**多分これが最速だと思います。(フラグ)

# 注意事項
あくまでフロントエンドエンジニアが趣味開発とかプライベートでちょっと触る場合にのみ使ってください。

# 記事の対象
フロントエンドがメインだけど、Webサービスを作る上ではバックエンドも避けて通れないのでちょっと触ってみたい。主流のRuby&RoRかPHP&Laravelを学習してみたいが、~~RoRはなんか終わりっぽいし(誹謗中傷)~~、Laravelにしとくか……という層をターゲットにしています。

# 先に知っておきたいLaravelぶっちゃけ話
## 開発方針について
フロントエンジニアの皆さんは、
**昔はバックエンドからHTMLを出力するモノリスが主流だったけど、今はフロント(SPA)とバック(API)を分離して開発しやすくするのが主流**
……という価値観を持っている方が多いかと思います。しかし残念ながら、
**LaravelはバックエンドからHTMLを吐き出すモノリス路線(密結合路線)がメインです。**
というのも、初版が[

元記事を表示

[Laravel]ログインの有効時間を個別に設定する方法

管理者と一般ユーザーなどで複数のログインフォームを持つ場合に、個別にログインの有効時間を設定する方法
意外と難しいやり方をしている記事が多かったため、メモ用に作成

## やり方
“`php:app/Providers/AppServiceProvider.php
public function boot()
{
// 以下を追加する
if (request()->is(‘admin*’)) {
// urlのpathに「admin」が含まれる場合はadmin用の設定を適応する
config([‘session.cookie’ => config(‘session.cookie_admin’)]);
config([‘session.lifetime’ => config(‘session.lifetime_admin’)]);
}
}
“`

“`php:config/session.php
‘lifetime

元記事を表示

初心者がプログラミングを100時間やったらこうなった。

はじめまして。

暇人の大学生です。大学では経営やマーケティングの勉強をしていますが、今は4年なので授業もなく、「卒論やりたくねー」と思いながらダラダラしています。

https://note.com/yuraku0927/m/m028fe480b4d1

普段はnoteの方でこんな暇つぶしをしています。

なぜプログラミングを始めようと思ったか。「起業したい」「アプリを作りたい」「エンジニアになりたい」などなど、プログラミングを始める理由はいろいろありますが、自分にはそんな大した理由はありません。

**「暇だから」**です。それだけ。

時間はあるのにお金がない...とりあえずパソコンは持っていたので、やってみることにしました。

そんなめちゃくちゃ意識の低いスタートをきったプログラミングですが、ここまでで「やっと」**100時間達成**しました。そして今回、100時間達成を記念しこのNOTEの執筆を決意。

「100時間しかやってないのかよ」そんな声が聞こえてきます。普通の人なら100時間勉強するなら1ヶ月あれば十分でしょう。しかし、僕は半年かかりました。もう1度言います。半年で

元記事を表示

今日の日付を取得する Carbon

こんにちは。ソウタです。

特定のデータの取得の仕方についてメモも兼ねて、アウトプットしていきたいと思います。

Laravelで料理注文アプリを作っていたので、アプリのコードを元に説明していきたいと思います!

まず、ユーザーが料理を注文し、注文を受けたレストランが「今日の注文履歴」をみたいので、それをフロントに表示させたい過程にいると仮定します。(ユーザーが注文する所は省略)

“`php.RestaurantController.php
use Carbon\Carbon;
“`

Carbonを使うので、use宣言をコントローラに書く。

“`RestaurantController.php
public function RestaurantAccount()
{
$restaurantId = Auth::user()->id;

// クエリ(SQL)を変数へ一旦入れておくとコードがスッキリする。
$query = Restaurant::find($restaurantId)->orders();

元記事を表示

Kotlinで地図アプリ(ゴミ拾いアプリ)作成。(11日目)完成?

Kotlinで制作している、GoogleMapを使った、自作のゴミ拾いアプリ。制作11日目。

結論から言うと、本日、完成しました。

Node.jsを使いMySQLと接続する予定でしたが、レンタルサーバでは使えないようなので、PHP+jQueryを使う方法に変更しました。

#PHPでMySQLに接続しJson形式で出力

Qiitaで紹介されているコードを参考に、若干修正を加えて、動作チェック用のシンプルなコードを作成してみました。

“`php:sql_read.php

元記事を表示

アロー演算子で動的に要素を指定する方法

※自分用のメモ

##問題
PHPを使っていると->(アロー演算子)を使うことがあります。
使い方としては連想配列の要素を指定したり、Laravelのコレクションで使うことがあり

“`php:
$fruits = [‘apple’=>’りんご’, ‘peach’=>’もも’, ‘pear’=>’なし’];
$select = $fruits->peach;
print($select); //もも
“`
↑ざっくりですが、こんな感じで連想配列の要素を指定してやると、その要素を取得してきます。
ただ、このアロー演算子、使っていると指定する要素を動的に変更してやりたいと思うときがあり、その場合は以下のように記載します。
##やり方

“`php:

$animals = [‘animal_1’ => ‘らいおん’,’animal_2′ => ‘さる’,’animal_3′ => ‘しまうま’];
for ($i = 1; $i <= 3; $i++) { $select = $animals->{‘animal_’ . $i};
print($select);
}

元記事を表示

PHPでNullバイトアタック対策

 新年初めてのコード書き始めを行っていて。とりあえず、PHPのNullチェックを作ってみた

“`php
class Secure {
// Null Byte Check.
public function sanitizer($arr) {
array_walk_recursive($arr, function($val, $key) {
if (preg_match(‘/\0/’, $val) === 1) {
// エラー処理.
}
});
}
}
“`

 良くある、array_mapのルーチンよりかはスマートかと。「Nullバイトがあるデータがあるのが変なので、そのデータは弾け」おじさんが居たので、そう実装してみました。手動で簡単なテストもしてます

 今年も、よろしくお願いします:blush:

元記事を表示

【実践】Laravel+MySQLの全文検索機能実践

# はじめに

`LIKE`検索は全ての行に対して条件に合致するかを判定するのでデータが増えるにつれ検索速度が遅くなる場合があるようです。

この記事では、MySQLの全文検索機能を導入した方法についてハンズオン形式で紹介させていただきます。

https://dev.mysql.com/doc/refman/8.0/ja/fulltext-search-ngram.html

完成系のリポジトリ
@ucan-labさんの記事を参考にLAMP環境を構築いたしました?‍♂️

https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4

https://github.com/nao-haba-dev/ngram-docker-laravel

# 事前準備
– GitHub・Dockerが利用できる準備をお願いします

https://github.com

https://qiita.com/ucan-lab/items/aadbedcacbc2ac86a2b3

– MAC

https://docs.docker.com/deskt

元記事を表示

docker-laravel の Docker 構成をちゃんと理解する【Dockerfile 編 – Nginx】

@ucan-lab さんの [docker-laravel](https://github.com/ucan-lab/docker-laravel) の環境をちゃんと理解するための記事

今回は Dockerfile の Nginx 編です。

[docker-compose 編](https://qiita.com/tkek321/items/9c0c5cec1dc349c67f5f)
[Dockerfile 編 – PHP](https://qiita.com/tkek321/items/5d7714d7170bbf379c11)

# Dockerfile

https://github.com/ucan-lab/docker-laravel/blob/main/infra/docker/nginx/Dockerfile

“`dockerfile:dockerfile
# — ① ビルドイメージの指定 —
FROM node:16-alpine as node
FROM nginx:1.20-alpine
# ——
# ② メタデータを追加
LABEL ma

元記事を表示

PHP 8.1 Enums を使ってみる

## 列挙型(Enumerations)

PHP8.1で実装されたEnumの使い方を軽くご紹介します。

## 環境

“`shell-session
$ php -v
PHP 8.1.1 (cli) (built: Dec 17 2021 23:49:52) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.1, Copyright (c) Zend Technologies
with Zend OPcache v8.1.1, Copyright (c), by Zend Technologies
“`

## 使い方

“`php

元記事を表示

『SQLアンチパターン』まとめその4(19〜25章)

[SQLアンチパターン](https://www.oreilly.co.jp/books/9784873115894/) をまとめました。
この本では、

1. [データベース論理設計のアンチパターン(1〜8章)](https://qiita.com/Natsumag/items/c9c91f6fa7a3af6dd1d1 “『SQLアンチパターン』まとめその1”)
1. [データベース物理設計のアンチパターン(9〜12章)](https://qiita.com/Natsumag/items/9eb3c32a3193c74abbe6 “『SQLアンチパターン』まとめその2”)
1. [クエリのアンチパターン(13〜18章)](https://qiita.com/Natsumag/items/aca26493cd071a573c4a “『SQLアンチパターン』まとめその3”)
1. アプリケーション開発のアンチパターン(19〜25章)

の4つのパートに分けてそれぞれのアンチパターンを解説しており、
この記事では「__4. アプリケーション開発のアンチパターン__」について記述します。

元記事を表示

Laravelのnullチェック使い分け(随時更新)

## Request
以下がある。

– isset()
– is_null()
– empty()

※PHPのネイティブメソッド
各メソッドの違いは[こちら](https://qiita.com/xQIEBo4zFWKZ0ig/items/a69ec15aa1697b13d666)

### ちなみに : Requestのnull挙動
– そもそも対象のnameが存在しない時
nullになる

– nameは存在するが、valueが空の時
これもnullになる

## Collection
以下がある。

– isEmpty()
– isNotEmpty()

※Laravelのコレクションメソッド

## 参考文献
https://readouble.com/laravel/6.x/ja/collections.html

元記事を表示

PHPのnullチェック使い分け

## nullのみチェック
### isset
– nullの時だけfalse
– 空文字、空配列はtrueになる

### is_null
– nullの時だけtrue
– 空文字、空配列の時はfalse

## 全チェック
### empty
– null、空文字、空配列すべてtrueになる

## 参考文献
https://qiita.com/shinichi-takii/items/00aed26f96cf6bb3fe62

元記事を表示

【PHP】if文で「isset()」を使うより「??」を使うべき理由がコレ

以前ちょっとだけPHPのチームに所属していた時に、タイトルの通り、__ある変数に値が入っていた場合にのみ、その後の処理を行う__ようにコードを書こうとしていました。

なんてことない処理なのですが、自分が思いつくままに書いたコードはこんな感じでした。

“`php
if (isset($someVar)) {
echo(“Uno”);
}
“`

そして、そのままプルリクエストを出したのですが、
レビュアーの先輩から「こんな書き方で動かないかな?」というコメントと共にこんなコードを送られました。

“`php
if ($someVar ?? “”) {
echo(“Uno”);
}
“`

それまでPythonしか触ってこなかったので、「ダブルはてな?なにこれ?」となりました笑

この「??」の働きとしては、ざっくり言うと__「??」の前にある変数に値が無い場合には、「??」の後ろにある変数の値に置換する__というものになります。

基本的な使いかたについては[こちらの記事](https://tektektech.com/php-double-question/

元記事を表示

VSCodeのPHP IntelephenseでPHP8.1の記法記載時にエラーがでる

# はじめに

ローカル環境にて、PHP8.1 にバージョンアップしたところ、PHP Intelephense 拡張機能でエラーが出るようになってしまいました。
どうやら readonly アクセス修飾子を型と認識しているようです。

![php_intelephense_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586387/09e59da7-40a6-1d12-adf9-f7b4d498220d.png)

# 結論

:::note info
settings.json に PHP Intelephense の設定で PHP バージョンを指定すれば OK
:::

“`json-doc
{
// ターゲットのPHPバージョンを表すsemver互換の文字列。
// バージョンに適した提案と診断を提供するために使用されます。
// PHP5.3.0以降がサポートされています。
“intelephense.environment.phpVersion”

元記事を表示

macOS Monterey(12.0.1)にapacheとphpを設定する

Montereyからapacheのデフォルトでphpがオフになってしまった。
いろんなサイトで情報を継ぎはぎしたので、自分の場合、うまくいった方法をメモる。

brewを更新

“`
$ brew update
“`

#H2 apacheをインストール
“`
$ brew install apache2
“`

/usr/local/etc/httpd/httpd.confの以下を設定/変更。
* Listenを80
* Servernameをlocalhost:80
* mod_include.so がコメントアウトしてあるので、有効化する。
* DocumentRootを設定する

apacheをリスタートする。

“`
$ sudo apachectl restart
“`

#H2 PHPをインストール
元々、php 8.1が入ってたんだけど、どうやってもapacheとの連携ができなかったので、7.4バージョンを落として環境を作った。

“`
$ brew uninstall php
$ brew install install php@7.4
“`

元記事を表示

【PHP】filter_inputを使用したサニタイズ

#背景
ユーザーからの入力をデータベースに格納することは基本だと思うので、学んだついでに自分の忘備録として書いています。
#フォームからの入力
入力フォームでユーザーが入れた値を、データベースに格納する。

“`html:メモの入力画面



メモの入力





“`
“`PHP:入力を登録する操作

元記事を表示

[PMMP] Enum(列挙型)を使おう!

※この記事はPocketMine-API 4.0.0が対象です

# PMMPではEnumがPHP8.1じゃなくても使える!
PMMPには、[EnumTrait](https://github.com/pmmp/PocketMine-MP/blob/4.0.0/src/utils/EnumTrait.php)というTrait(機能)が実装されているので、これを使うことで実装することができます。

# Enumを使う理由
Enumを使用しない場合、例えば以下のようなコードになると思います。

“`php
class Trump
{
public const SUIT_CLUB = 0;
public const SUIT_DIAMOND = 1;
public const SUIT_HEART = 2;
public const SUIT_SPADE = 3;

private int $suit;

public function __construct(int $suit)
{
switch ($suit) {

元記事を表示

OTHERカテゴリの最新記事