- 1. 機能拡張を可変クラスで局所化する
- 2. Laravel エラー: Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version “>= 8.1.0”. You are running 8.0.8. in /Applications/MAMP/htdocs/leravel/test/vendor/composer/platform_check.php on line 24
- 3. 文字列への変数埋め込み
- 4. 【PHP】switch文のbreakを省略するしないで挙動が変わる
- 5. PHP 連想配列の値を使って配列に置換する ( array_values )
- 6. 【Laravel】最近WhereInの返す順番で詰まった・・・
- 7. PHP8.2バージョンアップ 新機能
- 8. 【PHP】可変変数で「カラスは白い」と言ってみた
- 9. PHP-関数
- 10. MAMPでPHP文字化け
- 11. 【PostgresSQL】WindowsPCのSQLサーバーの立て方
- 12. カプセル化をphpで説明してみた
- 13. PHP Fatal error: Uncaught Dotenv\Exception\InvalidFileException: Failed to parse dotenv file. Encountered an invalid name at xxxxx の解決例
- 14. What should your professional PHP developer know?
- 15. コマンドラインで動作するwikipediaのログ解析システムを作る
- 16. PHPでアクセスカウンターを作る
- 17. PHP静的解析ツール PHPMD 個人的メモ
- 18. PHP静的解析ツール PHPStan(Larastan) 個人的メモ
- 19. 【Laravel】イベントとリスナーで設定した通知が2回くる問題の解決法
- 20. Symfonyのバリデーションで、日本語のエラーメッセージを調整する
機能拡張を可変クラスで局所化する
# 1.はじめに
うちではgoogleAssistantからIFTTT経由でメインのPCをWOLできるのですが、ここのところうまくうごきません。googleAssistantと外部サービスはあんまりうまく行かないときがあるので今回もそうなのかもしれません(調べていない)。ただ、IFTTTをどうこうするというより、googleAssitantから自前のフルフィルメントを通してWOLする経路を造ってもいいのかもしれません。# 2.おさらい
自前で用意している〈試験版〉フルフィルメントからジュークボックスサービスに連携するモデル図を以下に示します。
![googleAssistantButlerSystem.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2696131/fd9f35ae-b4e1-1057-b9a6-06f0e62d3cca.png)フルフィルメントはgoogleAssistantから送られる登録済みのデバイスが使える機能要求を受け付けます。単純なものではスマートコンセントのオン
Laravel エラー: Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version “>= 8.1.0”. You are running 8.0.8. in /Applications/MAMP/htdocs/leravel/test/vendor/composer/platform_check.php on line 24
環境は下記の通り
・Mac OS
・Laravel v9.41.0 (PHP v8.0.8)MAMPでlocalhostにアクセスした時に以下のエラーメッセージが発生した時の対処法をまとめました。
“`エラー
Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version “>= 8.1.0”. You are running 8.0.8. in /Applications/MAMP/htdocs/leravel/test/vendor/composer/platform_check.php on line 24
“`エラー内容を簡単に翻訳すると、PHPのバージョンが違うということで、PHPのバージョンを変更しないといけないということがわかると思います。
このエラーの対処方法としては、PHPのバージョンを引き上げる必要があります。
それは下記のコマンドをターミナルで打つことで実装することができます。“`PHPのバージョンを
文字列への変数埋め込み
C#
“`c#
string word = “World”;
string text = $”Hello, {word}!”;
“`JavaScript
“`javascript
const word = “World”;
const text = `Hello, ${word}!`;
“`PHP
“`php
$word = “World”;
$text = “Hello, {$word}!”; // ${word} でもおk。但し、PHP 8.2以降では非推奨だとコメントで教えてもらいました。
“`Python
“`python
word = “World”
text = f”Hello, {word}!”
“`Ruby
“`ruby
word = “World”
text = “Hello, #{word}!”
“`
【PHP】switch文のbreakを省略するしないで挙動が変わる
## 環境
Laravel v9.5.1 (PHP v8.1.3)## breakを省略する場合
PHPのswitch文では“`break“`を省略するとフォールスルーという書き方になり、case文の処理が続けて実行される。
> CASE文の終わりにbreak文を書かない場合は、PHPは 次のCASE文を実行しつづけます。
https://www.php.net/manual/ja/control-structures.switch.php
“`php
$value = ‘1’;switch ($value) {
case ‘1’:
echo ‘承認待ち’;case ‘2’:
echo ‘承認済み’;case ‘3’:
echo ‘承認拒否’;
}
“`実行結果(見づらいので改行した)
“`
承認待ち
承認済み
承認拒否
“`## break省略しない場合
一つめの“`break“`で抜けるため「承認待ち」しか表示されない。
“`php
$value =
PHP 連想配列の値を使って配列に置換する ( array_values )
# 例
“`php
array_values(
array(
“A” => 10,
“B” => 5,
“C” => 7
)
);
“`結果
“`
Array
(
[0] => 10
[1] => 5
[2] => 7
)
“`# チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ
【Laravel】最近WhereInの返す順番で詰まった・・・
# はじめに
もう1年以上書いていないことにびっくりしました。
2022年あけましておめでとうございます# 仕様
DB
Products
| id |name|created_at|updated_at|
|——-|——-|—-|—–|
|1|みかん|2022-11-24 15:00:00|2022-11-24 15:00:00
|2|おでん|2022-11-24 15:00:00|2022-11-24 15:00:00
|3|らーめん|2022-11-24 15:00:00|2022-11-24 15:00:00
|…|…||こういったDBがありまして、
某サイトみたいな「最近チェックした商品」という機能が欲しいです。
実際にチェックした順番は、「おでん→らーめん→みかん」とします。# whereInの仕様
わい「なるほど!簡単やな」“` ProductController.php
public function productHistory()
{
# そのユーザがチェックした商品を取得する処理は省略します
$prod
PHP8.2バージョンアップ 新機能
## 目次
– 概要
– PHP8.2 新機能3選
– おまけ
– 最後に## 概要
今回のスキルアップのため不定期で30分でインプットしたことを投稿の
第五弾として、PHP8.2 新機能についてやっていこうと思います!未経験からエンジニア転職を目指し、2021年10月頃から本格的にプログラミングに触れ、2021年11月頃からPHPを触り始めたので、
2021年11月25日のPHP 8.1と今回のPHP8.2へのバージョンアップで2回目のバージョンアップを経験することになりますが、
PHP8.1の頃はバージョンアップしたことも知らなかったので実質初めてのバージョンアップで楽しみです!今回はPHP8.2の新機能の中から30分以内でインプットできる内容から3つ選んでご紹介しようと思います。
第四弾は、[Enum(列挙型)とは?](https://qiita.com/kitamurakunihiko/items/296ea5f3bda3be017836)について投稿したのでよければ確認してみてください?
## PHP8.2 新機能3選
### 1. [Deprecate
【PHP】可変変数で「カラスは白い」と言ってみた
こちらの記事はPHPの可変変数についてまとめたものです。
PHPで可変変数を使用する上でのメリットや懸念などについて、ソースコードと併せてまとめてあります。どうかご参考いただければ幸いです。
## 投稿の目的
本投稿の目的は、PHPにおける可変変数について自分なりのアウトプットを試みることです。
知識を整理するためのアウトプットはとても有意義なことですし、それをネット上で共有すれば自分がどれだけ理解しているかを知ることにもつながります。
プログラミング言語に関する投稿は初めてですが、思い切ってまいります!
## PHPにおける可変変数とは何か?
PHPには可変変数という変数があります。
これにより変数名に別の変数の識別子を指定することで、変数名を動的に付け替えることができます。ただ、この文言だけで可変変数について理解することはなかなかできないかもしれません。
そこで実際に、ソースコードを書いたり動かしたりしながら確認していきます。
## PHPで可変変数を使ってみる
早速ですが、まずPHPの可変
PHP-関数
# PHP-関数
* ドキュメント
https://www.php.net/manual/ja/language.functions.php1. 関数の基礎
【引数】
・リファレンス渡し → バグの温床になりやすい
・デフォルト引数
・可変長引数
・名前付き引数 → 引数の順番を変えたくない、気にしなくてよいときに使う
【返り値】
・return
・可変関数 → 関数の呼び出しを動的に行える1. 無名関数
クロージャーとも言われる
関数名を持たず、値として受け渡しできる
関数の引数に関数を渡したい時に使う
一回しかしない処理の時、関数を定義しないので、省スペースで書ける
親のスコープの変数を引き継ぎたいときは、useを使う※親スコープの変数は使えない。
無名関数は、簡単に書くことができる(アロー関数)
※アロー関数は、無名関数と違いuseを使わなくても、親スコープの変数を自動的に使える1. 関数を作成する理由
・プログラムの複雑さを下げるのが重要な理由
・詳細な処理を抽象化隠蔽することができる。
・コードの重複を避けることもできる。変更による箇所が一箇所にな
MAMPでPHP文字化け
MacでMAMPインストールしたが文字化けしたので、対策を備忘録
PHP7.4.12のバージョンを使用参考にした記事
https://plaza.rakuten.co.jp/taro3chidayo/diary/202005090000/
https://qiita.com/redamoon/items/28e7bbe1ccbf58cbbd04MAMP/bin/php/php7.4.12/conf/php.ini
php.iniを一部書き換える
その前にバックアップとっておく左辺をワード検索して、右辺を書き換え
文頭に「;」があれば削除
default_charset = UTF-8
date.timezone=Asia/Tokyo
mbstring.language = Japanese
mbstring.http_input = auto
mbstring.internal_encoding = UTF-8
mbstring.detect_order = UTF-8,SJIS,EUR-JP,JIS,ASCIIこれでMANPを再起動すれば治るはずが、治らない。
次
【PostgresSQL】WindowsPCのSQLサーバーの立て方
# 【PostgresSQL】WindowsPCのPostgresサーバーの立て方
## インストール
### 1. PostgresSQLのインストール
以下のサイトからPostgresSQLのインストーラーをダウンロードして、実行する。https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
PostgresSQLコマンドを使用するため、”システム環境変数の設定”から変更して、下記のフォルダへパスを通す。
“`
C:\Program Files\PostgreSQL\15\bin
“`### 2. Openjdkのダウンロード
以下のサイトから、任意のOpenJDKをダウンロードする。(例 JDK 19 etc)https://jdk.java.net/
任意のフォルダに置く。binの中にjava.exeなどがあり、merabase.jarを起動するときに使う。
“`
C:\Program Files\jdk-19.0.1\bin
“`### 3. Metabase
カプセル化をphpで説明してみた
1.カプセル化とは?
外部からデータや手続きの詳細を隠蔽すること、アクセスできないようにすることを「カプセル化」と言います。
PHPでは、**private**などを用いてクラスの外から変数やメソッドにアクセスできないようにすることで、「カプセル化」を実現しています。
以下で実際のコードを見てみましょう。2.カプセル化がされていないPHPのコード
“`
//カプセル化されていないコード
class hoge {
public function pub_func() {
echo “public”;
}
}
$obj = new hoge();
$obj->pub_func();//出力結果
public
“`
上記では、修飾子publicでメソッドを定義しています。
この時はclassの外でメソッドを呼び出しても、メソッドが実行されることが
わかります。
クラスの外からメソッドにアクセスできることから、このコードはカプセル化がされていないことがわかります。3.カプセル化がされているPHPのコード
“`
//カプセル化されているコード
class hog
PHP Fatal error: Uncaught Dotenv\Exception\InvalidFileException: Failed to parse dotenv file. Encountered an invalid name at xxxxx の解決例
## エラーが出た環境
xserver
larravel8
PHP 8.0
mariaDB
node 14.17.xx## 何をしようとしたら起きた?
.envを環境ごとに.env.prodと.env.localのように分けても自動で読み取れる実装をしたところ、レンタルサーバー上でタイトルのエラーが出た。(nameに当たるxxxがxserverへのssh接続のコマンドだった)## 原因
.env.prodを作成(コピーアンドペースト)したときにsshコマンドまで貼り付けてしまった。## 結論(修正方法)
.envファイルの不要な記述を削除で直った。## 余談
上記の作業中に.envファイルの`APP_ENV=production`を`APP_ENV=prod`にした箇所でもバグったので、.envのエラー探しのときは確認してみても良いかもしれない。
What should your professional PHP developer know?
“Here’s a list of ingredients that your professional PHP developer must have:
Good grip on procedural programming theory Well-versed with Object Oriented Programming
Technology Expertise Ability to build flawless digital products using the latest technology stack comprising:
o Symfony
o Zend Framework
o PHP
o JS
o CakePHP
o jQuery
o CodeIgniter
o Dojo
o Lamp
Security Seasoned in professional practices and instincts providing high-level security to your code, database and file system
Analysis A
コマンドラインで動作するwikipediaのログ解析システムを作る
## はじめに
コマンドライン上で動作するwikipediaのログ解析システムを作成しました。
こちらはプログラミング学習サービス、独学エンジニアの課題への取り組みです。https://dokugaku-engineer.com/
データベースのパートの最後の課題として出題されるもので、模範解答はありません。
多言語で構成されたデータベースを、プログラム(PHP)を通じて扱うことで、データベースやPHPへの理解が深まりました。
作成に当たってつまずいた所を中心に、開発をまとめました。作成したものはGithubで公開しております
https://github.com/progundeike/wiki-log-analysis実行中のキャプチャー
## 実装する機能
公開されているWikipedia
PHPでアクセスカウンターを作る
ここでは、ファイルを使ってアクセスカウンターを作成します。
アクセスカウンターの値を保持するファイルを1つ作成し、ページを表示するたびに、そのファイルの値を参照してアクセスカウンターを表示することにします。
まず、アクセスカウンタを表示しているページが表示されたら、アクセスカウンタを保持しているファイルをr+モードで開いてください。
“`php
$counter_file = ‘counter.txt’;
$fp = fopen($counter_file, ‘r+’);
fclose($fp);
“`
現在のカウントを読み取ります。
アクセスカウンターの桁数は8であること。
“`php
$counter_file = ‘counter.txt’;
$counter_lenght = 8;$fp = fopen($counter_file, ‘r+’);
if ($fp){
if (flock($fp, LOCK_EX)){$counter = fgets($fp, $counter_lenght);
flock($fp,
PHP静的解析ツール PHPMD 個人的メモ
# PHPMD
[PHPMD公式サイト](https://phpmd.org/)
+ 考えられるバグ
+ 最適でないコード
+ 複雑すぎる表現
+ 未使用のパラメーター、メソッド、プロパティを通知してくれる
「最適でないコード」「複雑すぎる表現」あたりはPHPStanと差別化出来ているのかな。“`bash
# ./vendor/bin/phpmd [パス] [フォーマット] [オプション]# example
./vendor/bin/phpmd app/Http/Controllers/TopController.php text codesize,design
“`## フォーマット
ターミナルで実行してみる分には個人が見やすい形式でOK。
PHPMD を組み込んでシェルでゴニョゴニョしたい場合は、扱いやすい形式でどうぞ。| オプション | 説明 |
|:-|:-|
| ansi | ansi 形式で結果を出力 |
| html | html 形式で結果を出力 |
| json | json 形式で結果を出力 |
| text | text 形式で結果を
PHP静的解析ツール PHPStan(Larastan) 個人的メモ
# PHPStan (Larastan)
レベルに応じたソースコードの解析を行い、不具合の原因になりかねない箇所を指摘してくれる素晴らしいツール。
[PHPStan公式サイト](https://phpstan.org/ “PHPStan”)
## 使い方
“`bash
# ./vendor/bin/phpstan analyse -l [level] [検証するパス]# example
./vendor/bin/phpstan analyse -l 4 app/Http/Controllers/TopController.php
“`## level
下位レベルのテストを全て含む(※レベル3はレベル0~2もチェックするよ)
| レベル | チェック内容 |
|:-|:-|
| 0 | 基本的なチェック、未知のクラス、未知の関数、$thisに呼び出された未知のメソッド、これらのメソッドや関数に渡された引数の数が間違っている、常に未定義の変数。 |
| 1 | 未定義の変数、未知のマジックメソッド、__call や __get を持つクラスのプロパティ
【Laravel】イベントとリスナーで設定した通知が2回くる問題の解決法
## 環境
Laravel v9.5.1 (PHP v8.1.3)## 状況
動作確認で通知を飛ばしたとき、同じ通知が2回飛んでしまっていた。
– “`$listen“`の配列に“`PodcastProcessed“`イベントと“`SendPodcastNotification“`リスナーを手動で登録
– “`shouldDiscoverEvents()“`メソッドをデフォルトの“`false“`から“`true“`に変更“`php
namespace App\Providers;use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;class E
Symfonyのバリデーションで、日本語のエラーメッセージを調整する
Symfonyのバリデーションで、日本語のエラーメッセージを微調整する方法。ちなみにSymfony 5.4。
## やりたいこと
エラーメッセージの日本語が分かりづらいので、微調整したい。
`@Assert\NotBlank()`でエラーが出ると「入力必須項目が入力されていません」、
`@Assert\Email()`は「有効なメールアドレスではありません」、
となっていて、微妙な日本語になっている。この日本語を変えたい。
## 解決方法
1. Validatorの日本語ファイルを探しだした。場所は:`vendor/symfony/validator/Resources/translations/validators.ja.xlf`
2. このファイルを、ここにコピー:`translations/validators/validators.ja.xlf`
3. 中身の日本語を適宜修正。これで、変更できた。
適当に試したら動いた、という珍しいパターンだった。