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

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

PHP_CodeSnifferとPHP-CS-Fixerの比較

PHPのコードスタイルをチェックしてくれるツール (Linter) といえば、**PHP_CodeSniffer**と**PHP-CS-Fixer**の2つが有名です。

2種類あるがゆえに、いざツールを導入しようとなると「どっちを選べばいいの!?」となりがちだと思います。というか自分が実際なりました。
というわけで、私が担当プロダクトへのLinter導入にあたって調査した、PHP_CodeSnifferとPHP-CS-Fixerの比較を紹介します。

## 使い方
いずれもComposerでインストールし、コマンドラインから実行できます。

特徴としては、PHP_CodeSnifferはチェックと自動修正でそれぞれ`phpcs`,`phpcbf`という別コマンドに分かれているのに対し、PHP-CS-Fixerは`php-cs-fixer fix`コマンドで自動修正、それに`–dry-run`オプションを付けるとチェックのみになる、という違いがあります。
PHP-CS-Fixerは “Fixer” という名前からもわかるように、あくまでコードの修正が基本で、チェックする機能はそのドラ

元記事を表示

Yiiを使ってみて

## はじめに
最近WEBアプリ兼WEBAPIを作成する際にYiiフレームワークを初めて採用したので
・実際に使ってみてどうなのか
・他のフレームワークと比べてどうなのか
を書こうと思います
## なぜYiiなのか
まずなぜYiiフレームワークを採用したか語ります
それは公式サイトに書いてあった
“Yii は、コードはシンプルかつエレガントに書かれるべきである、という哲学を採用しています”
この理念が美しいと思ったからです(はっ!?

https://www.yiiframework.com/doc/guide/2.0/ja/intro-yii

実際使ってみて非常にシンプルに、そしてわかりやすく書くことが出来るのでとても書いていて気持ち良いです
コードレビューの際にも非常に楽ですね!
## 採用したはいいが、、、
Yiiの理念美しい!いざっ採用&勉強&開発!と威勢よく思い立った私ですがかなりの分厚い壁にあたります
それは
### 美しく書くためにはそれなりにディレクトリ構造が複雑になる
ということです
例えばMySQLデータベースを利用する際には
~~~:
config/db.php

元記事を表示

DoctrineとEloquent比較大全: テストフィクスチャを作る

day25(から2日遅れの!)今日はテストフィクスチャの作り方を見ていきます!

## Doctrine

“`php:Fixtures/AuthorLoader.php
setName(‘author’.$i);
$manage

元記事を表示

DoctrineとEloquent比較大全24: migration

## Doctrine

“`bash
vendor/bin/doctrine-migrations diff
“`

“`php

元記事を表示

DoctrineとEloquent比較大全23: FROMにサブクエリを使う

day23(から3日遅れの)今日はfromにサブクエリを使う方法を見ていきます。

## Doctrine

“`php

元記事を表示

【備忘録】関数の呼び出し元の参照

# 呼び出し元の参照

## 目的
・同じ名前の関数が複数ある場合にどのファイルの関数を使用したのかを探りたい。

## 使用方法
・呼び出し元を知りたい関数の中に記載するだけ。
“`php
$dbg = debug_backtrace();
foreach ($dbg as $dbgrow) {
echo $dbgrow[‘file’];
echo $dbgrow[‘line’];
echo $dbgrow[‘function’];
echo $dbgrow[‘class’];
echo “
“;
}
“`

## 詳細
function・・・関数名が格納されています。
line・・・行番号が格納されています。
file・・・ファイル名が格納されています。
class・・・クラス名が格納されています。
object・・・オブジェクトが格納されています。
type・・・コール方式が格納されています。 ※メソッドの場合は “->”、 静的メソッドの場合は “::” 、関数の場合は空になっています

元記事を表示

【PHP】フォーム送信後にチェックボックスの選択を保持する

## はじめに
実装に苦戦したので、備忘録として記事にしました。
まだまだ勉強中の身なので、知らないことがたくさんあります。
優しく見守ってくれると嬉しいです。

## 実装したいこと
問題1で「織田信長」と「ショパン」を選択し、問題2を選択せずに送信ボタンを押したとき、選択を保持したままエラーメッセージを表示する。
複数の入力画面があってエラーがでたとき、全て入力しなおすなんてことにならないように。
![スクリーンショット 2022-12-26 182555.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082297/da44796b-58e3-8b12-83ff-24ae05728097.png)

## 環境
* XAMPP Version 8.1.10
* Visual Studio Code Version 1.74.2

## データベースの構造(phpMyadmin)
![スクリーンショット 2022-12-26 181211.png](https://qiita-image-store

元記事を表示

【Qiita】新着記事一覧ページを疑似再現する

Qiitaの[新着記事一覧](https://qiita.com/items)が[殺されました](https://blog.qiita.com/close-item-list-page/)。

:::note
そのため現在は、全ユーザーに一律の情報を見せるのではなく、ユーザー1人1人の興味に合わせて自分が欲しい情報に出会えるように、ホームフィードや、タイムラインフィードを用意しております。
:::

そんな余計なことしなくていいから全記事を一覧させろ。

と嘆いていても死んだ子は帰ってこないので、ここでは逆転の発想で考えましょう。
すなわち、ありとあらゆるタグを全てフォローすることで、タイムラインに新着記事一覧ページを疑似再現するのです。

Qiita APIに[tags/:tag_id/following](https://qiita.com/api/v2/docs#put-apiv2tagstag_idfollowing)があるので、これをひたすら延々叩くことにしましょう。

……ところで`:tag_id`ってなんだ?
[タグ一覧ページ](https://qiita.com/tag

元記事を表示

【PHP】stdClassのオブジェクトの値を取得したいとき(Call to undefined method stdClass::hoge() の対処法)

## やりたいこと

LaravelでDBから返ってきたstdClassのオブジェクトの値を取得する際、エラーが出てしまったのでメモです。

以下の場合に、’2022-12-04’を取得したい。

“`
// 取得したデータ
$latestDate = array (
0 =>
(object) array(
‘MAX(users.created_at)’ => ‘2022-12-04’,
),
)
“`
## エラーが出た

いつものように以下のように書くと、エラーとなりました。
“`
echo $latestDate[0]->MAX(users.created_at); //Call to undefined method stdClass::MAX() {“exception”:”[object] (Error(code: 0): Call to undefined method stdClass::MAX() at …
“`

`MAX()`がプロパティ名ではなく、メソッドだと認識されてしまっています。

## 解決策

プロパテ

元記事を表示

PHPの基礎④関数 (独学エンジニア レッスン12より)

PHPの基礎を学ぶ④関数

タスクばらし
* 関数の基礎
* 無名関数
* クイズ
* 発展

# 関数の基礎
関数の引数
* 関数の引数にはいくつか種類がある。デフォルトは値渡し

リファレンス渡し
※あまり使用しない
“`
function change(&$string)
{
$string = ‘after’;
}
$str = ‘before’;
change($str);
echo $str; // => ‘after’
“`

デフォルト引数
“`
function purchase($num = 1)
{
return $num . ‘個購入した’ . PHP_EOL;
}
echo purchase(); // => 1個購入した
echo purchase(2); // => 2個購入した
“`

可変長引数
“`
function product(…$numbers)
{
$sum = 1;
foreach ($numbers as $n) {
$sum += $n

元記事を表示

base64をimg/pngに保存した時にちょっとつまづいたこと。文頭の`data:image/png;base64`は消す。

以下の質問いただきました。
「パソコンのwebカメラで写真撮って、jpgとかpngで保存したいです」

と言うことで、

1. まずは「ブラウザで写真を撮影する方法」を確認したところ、すでに記事があるのでこちらを[参考](https://zenn.dev/tatsuyasusukida/articles/84e789bea68b1e)。

2. また、PHPには`base64_decode`関数がある様子。
(公式は[こちら/base64_decode](https://www.php.net/manual/ja/function.base64-decode.php))

と言うことで,base64形式を取得してデコードすりゃいいんじゃないかと思ったんですが、どうもうまくいかない。

で、確認するとエンコードされたbase64の文頭の`data:image/png;base64`はdecode時には不要なんですね。
[参考](https://stackoverflow.com/questions/15153776/convert-base64-string-to-an-image-f

元記事を表示

昨日まで接続できていたDBに拒否された。

昨日まで接続できていたサーバーから拒否されてしまった。
コードはいじっていなかったためadminで確認したところ、ユーザー権限の一覧から登録していたユーザーが消えていた。
でも、shellでユーザー一覧を確認したところ、DBには存在していた。

shellにて該当のユーザーを削除し、再作成したところ、解決した。

元記事を表示

DBに格納されているjson形式のオブジェクトデータをtwigのループで回す

忘れるんでメモ

## エンコード結果がオブジェクト形式だとtwigで回せない。

配列にキャストする。
“`php
class HogeEntity{

private value $json_data;

public function getJsonData()
{
return (array)json_decode($this->json_data);
}
“`

元記事を表示

複数ECサイトを一括検索するアプリを作ってみた。

## 作ったもの
検索キーワードを入れると、Yahoo,楽天,Amazon(まだ)の複数ECサイトで検索を行い、商品を閲覧できるアプリケーションを作成しました。「価格順」「評価数順」などの並び替えや、価格での絞り込み機能もあります。
メルカリ、ラクマ、Paypayフリマ等への検索結果へもボタンを押すと遷移することができます。
https://www.seek-words.com/

![スクリーンショット 2022-12-26 10.44.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485238/65bf3813-5db9-45b3-ca65-bcd68ac38733.png)

## 作った背景
自分の中でネットショッピングがブームでして、ほとんどの買い物をオンラインでしています。
ゲームやDVD、日用品などのちょっとしたものまで、ほとんどがECサイトで買える便利な世の中になりましたね。

商品を見てから買いたいものなんて洋服、家電、家具くらいです。。

そんなオンラインショッピングを多く使う

元記事を表示

PHP strrev関数のマルチバイト対応

この記事はPHP 8.1.11を使用しています。

strrevがマルチバイト対応していないのでstrrevのマルチバイト対応関数をmb_strrevとして作成してみます。
結果から先にお伝えするとマルチバイト対応パターン1での対応が良さそうでした。

## マルチバイト非対応
PHP標準関数のstrrevはマルチバイト対応に対応していないためstrrevにマルチバイト文字列を使用すると文字化けします。
“`php
$str = ‘https://hogehoge.jp/りんご/バナナ/山田太郎/’;
echo(strrev($str));
“`
結果
“`
‘/��㎃骤尔籱匀�/��⊃㊃㐃㝀�/��━㓂㊂㙀�/pj.egohegoh//:sptth’
“`
## マルチバイト対応パターン1
文字列を1文字ずつ配列化 -> 要素を逆順 -> 文字列化します。
“`php
$str = ‘https://hogehoge.jp/りんご/バナナ/山田太郎/’;
echo implode(”, array_reverse(mb_str_split($str, 1, ‘UTF-8’

元記事を表示

個々のblade.phpファイルの中でそれぞれvueを記述する

## 環境

– Laravel: 8.6.2
– Vue.js: 2.6.12
– PHP: 8.0.8
– Composer: 2.5.1
– Node.js: 19.3.0

“`zsh
$ composer create-project –prefer-dist laravel/laravel:^8.0 project-name
$ php artisan migrate:fresh
$ composer require laravel/ui
$ php artisan ui vue –auth
$ npm install && npm run dev
$ php artisan serve
“`

Viewが用意されていて楽なので、この記事では既に用意されているhome.blade.phpに追記する形で、動かしていきたいと思います。

### Tips.認証機能の無効化

環境構築時に`php artisan ui vue –auth`としたのは、新たに追加されるapp.blade.phpとhome.blade.phpを使うためです。
しかし、一々このためにregi

元記事を表示

2022年のEC-CUBEを振り返る

EC-CUBE コミュニティマネージャーの梶原です。

EC-CUBE Advent Calendar 2022 ラスト(25日目)は、毎年恒例となりました、今年2022年の振り返りをしたいと思います。

引き続きコロナ禍ですが、少しずつリアルの繋がりやイベントも戻ってきた1年でしたね。
EC-CUBEでも約2年半ぶりとなるリアルイベントを実施できて、改めてコミュニティの楽しさやすばらしさを感じる1年になったと思います。
W杯の印象が強い今年でしたが、改めて振り返ってみると冬のオリンピックも今年だったらしいですね。
なんだか今年は長い1年だった気がします。
まあ、そういうことで、ここからEC-CUBEの1年を振り返りをしていきますので、皆様もご一緒にこの1年を是非振り返ってみてくださいませ。

## 2021年12月末

2022年を振り返っていく前に、昨年2021年12月末でとても重要なページを公開しましたので、先にそちらを紹介させてください。

![SnapCrab_NoName_2022-12-25_19-42-38_No-00.png](https://qiita-image

元記事を表示

DoctrineとEloquent比較大全22: 論理削除する

day22(から3日遅れ)の今日は論理削除のやり方について見ていきます。
論理削除とは、レコードを削除する操作を行ったとき、実際にはDBMS上からDELETEせずに削除フラグや削除日時をUPDATEで書き込むことで、「ゴミ箱に入れる」のように復活可能な削除を行うことです。

## Doctrine

“`php:Enity/Book.php

元記事を表示

DoctrineとEloquent比較大全21: レコードの更新日時・作成日時を自動で保存する

day21(から4日遅れ)の今日は、DoctrineやEloquentでレコードを保存するときに、作成日時・更新日時を自動保存する方法を見ていきます。

## Doctrine

“`php:Entity/Book.php

元記事を表示

【PHP】nヶ月後の日付を計算したい!

## とりあえず書いてみる
突然ですが、与えられた日付のnヶ月後を表示する必要が発生しました。
とりあえず書いてみます。

“`php
function addSomeMonthsToTargetDate($targetDate, $months)
{
return date(‘Y-m-d’, strtotime(“+{$months} month”, strtotime($targetDate)));
}

$result = addSomeMonthsToTargetDate(‘2022-10-25’, 2);
var_dump($result); // 2022-12-25
“`
一回strtotimeでUNIXタイムスタンプに変換して、計算してから戻せば良さそうです。
ただ、strtotimeは2038年問題が発生するので避けたほうが良いと聞いたことがあります。
とりあえず確認します。
“`php
$result = addSomeMonthsToTargetDate(‘2037-10-25’, 3);
var_dump($result); // 1970-01-

元記事を表示

OTHERカテゴリの最新記事