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

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

PHP(Laravel)環境でstaticおじさんにならない心構え-staticの使いどころ編

# 追記

なし

# はじめに

__いろんな記事を見た結果、圧倒的私流結論をまとめると下記以外はstaticはやめとけデス__

あるときstaticの使い方に悩みました。いつ使うんだこれは、と。
「static 使いどころ PHP」みたいに検索しても、「クラスのインスタンスを生成することなしに利用できるプロパティやメソッドのこと」とかそんなことしか書いてなかったです。(私感)

聞きたいのはそんなことじゃない。
いつ、どんな時に使うんだよ。

となったので、下記3つの時さえ注意してればOKかなと。
ワタシと同じ気持ちの人はぜひ参考にしてください。私の解釈なのであくまでご参考に。(※ここ違うんじゃないみたいなのは随時受け付けてますので優しくお願いします。)

# staticの使いどころ

### 【其の一】 singleton patternとか

singleton patternとはインスタンスが一つしか存在しないことを保証するパターン。
簡単にコードを記述してみると下記みたいな感じ。
Logger::getInstance()等もこれにあたりますね。

“`php:rou

元記事を表示

【PHP】Laravelをもっと便利に!BLOCS公開しました。

# なぜBLOCSを開発するのか
BLOCSはLaravelで使えるテンプレートエンジンです。LaravelにはBladeがあるのに、なぜBLOCSを開発するのか?「Bladeって結局プログラムをしないといけない感じがします」すべてはこの一言に集約されます。

名前`$name`がある時だけ表示するなど、HTMLを動的にするロジックをプレゼンテーションロジックと呼びます。LaravelのBladeのテンプレートは、下記のようにプレゼンテーションロジックがHTMLと密に混じっています。

“`html:example.blade.php
@if ($name != “”)

Hello, {{$name}}.

@else

Hello, Guest.

@endif
“`

せっかくHTMLは構造化されているのに、構造を活用せずにテンプレートを書くので「結局プログラムをしないといけない感」が出るのではと。HTMLの構造を活かすことで、Bladeのプログラムっぽさを減らせるのでは?と考え、BLOCSの開発を始めました。

## BLOCSができること

H

元記事を表示

【MySQL接続エラー】SQLSTATE[HY000] [2002] Connection refused【DBに接続ができない】

dockerを使用してlaravelの環境構築を行った後、apiの作り込みをしていたら、表題のエラーで詰まり、解決するにかなりの時間を浪費しました。
初歩的なミスで恥ずかしい事ですが、備忘録して今回の修正方法を記録しておきます。

### laravelのDB接続概要(簡易)
laravelでは、“`config/database.php “`に各種DBに接続する為、情報を記載する入力欄があると思います。
(基本的は、どの言語のフレームワークでも、同様の入力する欄があると思います)

“`php
‘connections’ => [
// 省略

‘mysql’ => [
‘driver’ => ‘mysql’,
‘host’ => env(‘MYSQL_HOST’, ‘127.0.0.1’),
‘port’ => env(‘MYSQL_PORT’, ‘3306’),
‘database’ => env(‘MYSQL_DATABASE’, ‘forge’),
‘username’

元記事を表示

EC-CUBE4.2で商品一覧に会員限定商品のみフィルターを追加する

# 概要
会員限定機能を追加できるプラグインを作成しました。
https://www.ec-cube.net/products/detail.php?product_id=2671

こちらに会員限定商品のみをプラグインやコアファイルを弄ることなく一覧で表示する方法のご紹介です。

「mtb_product_list_order_by」テーブルに1項目を追加する

Cusotomizeディレクトリ内にRepositoryディレクトリを設置する

追加したディレクトリにProductWhereAdd.phpを追加する
“`php:ProductWhereAdd.php

元記事を表示

【初心者向け】functions.phpにhead情報を入れる

いつも煩雑になりがちな`header.php`に記載している情報を、メンテナンス性を向上させる目的で`functions.php`に書くことを覚えたので、共有します。

他のテーマファイルについては、以下の記事で書いてますのでお時間ありましたら合わせてご覧ください。

:::note info
ファイルの構造や解説等、Wordpress(以下、WP)のテーマを自作する際の基本的な部分は、こちらの記事で紹介しています。
+ [【初心者向け】Wordpressテーマを自作する際に分かってると良いかもしれない事](
https://qiita.com/makkie/items/dc764c2845492079c0af)
+ `index.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[index.php]](https://qiita.com/makkie/items/b5231a9f63b076c70af8)
+ `header.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[header.ph

元記事を表示

OSSソースコードリーディング(stefanzweifel/screeenly)

## 1. はじめに
今回コードリーディングしたものは下記のOSSのコード。
[stefanzweifel/screeenly](https://github.com/stefanzweifel/screeenly)

– スクリーンショットのAPIを提供するサービス
– starは400程
– PHP(Laravel)で記述されている
– 参考になったコードとコードの下にコメントを記載

### 2.本文
### Interface

“`PHP: modules/Screeenly/Contracts/CanCaptureScreenshot.php

元記事を表示

PHPの定数のサンプルプログラム

PHPで定数のサンプルプログラムを実装しました。
全体のプログラムです

“`html









WORK35A



元記事を表示

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.s3.a

元記事を表示

【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);
}
“`

元記事を表示

OTHERカテゴリの最新記事