- 0.0.1. PHP Laravel アクセス修飾子のルールを一旦整理する
- 0.0.2. [php初学者]型宣言とかnull系について
- 0.0.3. PHP:Laravel Strageを利用した複数画像uploadする方法1つとFlysystem-aws-s3で複数画像をuploadする方法2つとその処理速度
- 0.0.4. Laravelで、メソッドの返り値に対して呼び出したメソッドをモックする方法
- 0.0.5. VARCHAR(X)やINT(X)の「X」は何を表しているのか
- 0.0.6. macにComposer入れようと思ったら、usr/local/bin がなかった話
- 0.0.7. PHP 参照による変数への代入を自分的に理解してみた
- 0.0.8. DI はなんのためにあるのか
- 0.0.9. DatePeriodの罠
- 0.0.10. CakePHP 4.2.6 で HelloWorld
- 1. こんにちは
- 1.0.1. Laravelをレンサバ等のサブフォルダで動かす
- 1.0.2. PHP Fatal error: PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted
- 1.0.3. Laravel×Vue.jsでGoogleMapAPIを使ってみる
- 1.0.4. 2点間の距離を求める
- 1.0.5. PHPでContentfulのRichTextをレンダリングする
- 1.0.6. League\CSVでCSV作成
- 1.0.7. PHP 文字列の中から複数の指定した文字の削除方法
- 1.0.8. 【PHP8.1?】PHPのあらゆる関数を部分適用できるようにするRFC
- 1.0.9. laravel8に画像をアップロードするやり方➀
- 1.0.10. データベースとPHPの接続、データベースの中身をPHPを使ってJSONに変える
- 2. データベースをPHPで読み込むには
PHP Laravel アクセス修飾子のルールを一旦整理する
# 目的
– PHPのアクセス修飾子をなんとなくで使用していたのでこの機会にちゃんと整理する
# 記事を書いた経緯(自分用)
– LaravelでDI(依存性の注入)をしている時になんとなくコントローラークラスの最初の方で`private $userService;`と記載してコントローラークラスのプロパティを定義していた。
– ちゃんと意味を理解できておらず「とりあえずこういうふうに記載するとDIできる」と覚えていた。
– `private`がどのような意味を示しているかを整理してみる。# アクセス修飾子
### private
| ケース | アクセス可否 |
| — | — |
| 同クラス内アクセス | ○ |
| 継承先でのアクセス | ✕ |
| インスタンス化後のアクセス | ✕ |### protected
| ケース | アクセス可否 |
| — | — |
| 同クラス内アクセス | ○ |
| 継承先でのアクセス | ○ |
| インスタンス化後のアクセス | ✕ |### public
| ケース | アクセス可否 |
[php初学者]型宣言とかnull系について
#phpの型宣言
phpは[7.0](https://www.php.net/manual/ja/migration70.new-features.php)以降型宣言ができるようになりました。
元々は自動で型変換をしてくれていました。(coercive)
しかし、それだと見落としがちなバグなどに気づかないまま開発している…なんてことも多々あるらしく、この新機能はとても嬉しいものであったりします。“`sample.php
PHP:Laravel Strageを利用した複数画像uploadする方法1つとFlysystem-aws-s3で複数画像をuploadする方法2つとその処理速度
## 前提
・AWSアカウントが存在していてS3バケットが作成済である。
https://qiita.com/Yorinton/items/bdf5f9bc05629c9a0df7
・laravel Strageが利用できる。
https://readouble.com/laravel/8.x/ja/filesystem.html
・Flysystem-aws-s3をインストール済みである (AWS SDK for PHP laravelでもよいかな?)
https://www.ritolab.com/entry/8
https://qiita.com/ucan-lab/items/61903ce10a186e78f15f## laravel Strageを利用したupload方法
**upload方法その1**
“`PHP
foreach (Storage::disk(‘public’)->files(‘TARGET_DIR’) as $fileName){
$contents = Storage::disk(‘public’)->get($fileName);
Laravelで、メソッドの返り値に対して呼び出したメソッドをモックする方法
#環境
Laravel8系
php 7.3#伝えたいこと
タイトル何言ってんだと思われたと思います。
語彙力がなくてごめんなさい。要は、インスタンスのメソッドをモックするのは出来るけど、インスタンスのメソッドの戻り値に対してメソッドを呼び出したとき、そのメソッドをモック出来なくて困ったけど出来たよ、という報告です。ますます伝わらないかも。
“`php:コントローラー
class SampleController extends Controller
{
public function hoge()
{
$user = app(User::class)->find(1);$someMethod = user->someMethod(); //このsomeMethod()をモックしたい
}
}
“`こんな感じに、Userクラスのインスタンスにfindメソッドを呼び出し、それに対して呼び出したsomeMethodをモックしたいとき、どうするか?です。
“`php:テスト
use App\Models\
VARCHAR(X)やINT(X)の「X」は何を表しているのか
# はじめに
新人研修にてLaravelを使っている時のお話です。
テーブル設計を行う時にデータ型とサイズを決めなければなりませんでした。
その時に、例えば、INTの(X)のXは何を表しているのか正確に理解していなかったので、この機会に使用頻度の高いCHAR型やVARCHAR型などの文字列を格納するデータ型も含め、調べたいと思いました。
この記事を読み終えたあなたが適切にデータ型やサイズを決めることができることをこの記事の目標にしたいと思います。
ちなみにQiita初投稿です(なんか緊張する…)。# 検証環境
– macOS Catalina ver 10.15.7
– Docker ver 20.10.5
– docker-compose ver 1.29.0
– Laravel ver 7.30.4
– MySQL ver 8.20.3# 内容
## 「ユニコード(Unicode)とは」
### その前に、まず「文字コード」とは何なのか
– 文字に割り当てられた数字のこと。### MySQLでよくみる「utf8」と「utf8mb4」
– 「UTF
macにComposer入れようと思ったら、usr/local/bin がなかった話
Laravelで開発するため、Composer入れようと思ったら表題通り。。
対応方法↓
https://atuweb.net/202005e_error-no-such-dir-usr-local-bin/
PHP 参照による変数への代入を自分的に理解してみた
# 目的
– PHPの参照による変数への代入が自分の中で理解に苦しんだので今一度わかりやすい方法で考えてみる(誰にでもわかる方法がいまいちわからなかったのでメモ的にまとめる)
# 情報
– 下記のサービスを用いてソースコードの動作を確認した
– [https://paiza.io/ja](https://paiza.io/ja)# 公式ドキュメントの記載
– PHPの公式ドキュメントの下記のページに参照による変数への代入の内容が記載されている。
– [https://www.php.net/manual/ja/language.variables.basics.php](https://www.php.net/manual/ja/language.variables.basics.php)
– 下記のように記載されている。
– `PHP には、変数に値の代入を行う別の方法も存在します。それは、 参照による代入 です。 この場合、新規の変数は元の変数を参照するだけです。 (言いかえると、元の変数の”エイリアスを作る”または元の変数を”指す”) 新規の変
DI はなんのためにあるのか
## この記事について
DI (Dependency Injection: 依存性注入)とはなにか、という解説はよく見るんですが、なぜ DI か、という解説はあまり見ない気がするので、自分の考えを文書化しておこう、という試みです。
## DI(依存性注入)とはなにか
Wikipedia にある説明を載せるのに留めます。
> コンポーネント間の関係はインタフェースを用いて記述し、具体的なコンポーネントを指定しない。具体的にどのコンポーネントを利用するかは別のコンポーネントや外部ファイル等を利用すること
> https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5Laravel での使用例です。Laravel においては、インタフェースを介さず、キーとなる文字列(クラス名、コンテナを用いる場合は任意の文字列)を指定してインスタンスを得る場合も含みます。
“`php
class Order implements UseCase
{
private Paymen
DatePeriodの罠
`2021-05-17` から `2021-05-21` を1日ずつループしたい
そんなときに便利(?)な [DatePeriod](https://www.php.net/manual/ja/class.dateperiod.php) というクラスがあります`DatePeriod` は `Traversable` を実装しているのでオブジェクトのまま `foreach` でループできます
(ここだけは)素敵ですね!しかし、なにも考えずに使うとはまってしまうので注意が必要です!
## まずはコード
“`php
// 開始日
$startDateTime = new DateTime(‘2021-05-17’);
// 終了日
$endDateTime = new DateTime(‘2021-05-21’);
// 間隔(1日)
// 最初の文字は P 固定(これいる?)
// 1D は 1日
$interval = new DateInterval(‘P1D’);
$period = new DatePeriod($startDateTime, $interval, $
CakePHP 4.2.6 で HelloWorld
CakePHP 4.2.6 で HelloWorld を行う方法です。
プロジェクトの作成
“`bash
composer create-project –prefer-dist cakephp/app hello01
“`サーバーの起動
“`bash
cd hello01
bin/cake server
“`http://localhost:8765
にアクセス
![cakephp_may1701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/1b5211a8-d141-d0c0-4eb4-5f80a2e297a1.png)プログラムの作成
“`bash
mkdir templates/Hello
“`“`php:templates/Hello/index.php
こんにちは
こんにちは
Hello World!
Laravelをレンサバ等のサブフォルダで動かす
特定のドキュメントルート `/home/foo`があるとして
`https://xxxxxx/bar`でlaravel設置したいでも
“`
/home/foo
/bar(public)
/app
/config
“`みたいなのを避けたい時用
ググるとapacheのconfいじったりするのは出てきますがレンサバ等では出来ないので
htaccessとプラスアルファで出来る方法の備忘録まず設置(ディレクトリは省略)
“`
/home/foo
/bar
/app
/config
/public
“``/home/bar`配下に以下のhtaccess設置
“`
RewriteEngine on
RewriteBase /bar/
RewriteRule ^$ public/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ public/$1 [
PHP Fatal error: PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...>
##はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。今回は、“composer require “doctrine/dbal:2.*”“を試みた際に、PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted以下略というメモリに関するエラーが発生しましたので解決策を記録しておきます。
間違いなどがございましたら、ご指摘のほどよろしくお願い致します。
##エラー文
“`
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223Fatal error: Allowed memory size of 1610612736
Laravel×Vue.jsでGoogleMapAPIを使ってみる
# やりたかったこと
– 現在地を取得
– 取得した現在地を元に、〇km以内にある施設データをDBから取得
– 取得したデータを元に、地図上にマーカーを立てる(マーカーをクリックすると吹き出しが表示される)# 環境
Laravel8
MySQL8
Vue.js
Vuetify### GoogleMap API 公式ページ
https://developers.google.com/maps/?hl=ja### APIキーを取得
Google Maps APIを使用するには、APIキーを取得する必要があります。
2016年6月11日から、APIキーの取得が必須になったようです。APIキーはGoogleアカウントを取得後、Google Cloud Platformで取得できます。
[Google Cloud Platform](https://cloud.google.com/)## 地図を描画するエリアを作る
“`vuejs
2点間の距離を求める
2拠点間の距離を求める方法を備忘録として残りておきます。
### 計算で算出する
“`php
/**
* 変数は下記が入っているものとする。
* $lat:現在地の緯度
* $lng:現在地の経度
* $comparisonLat:距離を比較する緯度
* $comparisonLng:距離を比較する経度
*/// 緯度、経度の移動量を計算
$latDistance = $lat – $comparisonLat;
if ($latDistance < 0) { $latDistance *= -1; } $lngDistance = $lng - $comparisonLng; if ($lngDistance < 0) { $latDistance *= -1; } // 緯度位置における経度量を計算 $latitude = 30.9221438 * cos($lat / 180 * pi()); if ($latitude < 0) { $latitude *= -1; } /** * 緯度や赤道での経度の場合0.0002777
PHPでContentfulのRichTextをレンダリングする
備忘録です。
## 環境
Laravel 8## 主な手順
1. composerでrich-text.phpを追加
1. NodeRendererInterfaceを実装したクラスを用意
1. RendererクラスにpushNodeRendererメソッドを使って[2]で用意したレンダラーを登録
1. Renderer::renderメソッドにAPIで取得したRichTextNodeを渡す## composerでrich-text.phpを追加
公式から配布されているリッチテキストレンダリング用のライブラリをcomposerでインストール
“`shell
composer require contentful/rich-text
“`## まずどうやってレンダリングされるのか
“`php
// エントリーの取得
$entry = $this->client->getEntry(‘Entry ID’);// レンダラーのインスタンス化
$renderer = new Renderer();
// 用意したレンダリングクラスを登録
$renderer->p
League\CSVでCSV作成
# League\CSVでCSV作成する方法について
## 概要
[League\CSV](https://csv.thephpleague.com/)でCSV作成する際のモジュールになります。## プログラム
よく利用する`BOM付きUTF-8`と`SJIS-win`で作成する機能をそれぞれ定義しています。“`php
PHP 文字列の中から複数の指定した文字の削除方法
phpにて、文字列の中から複数の特定の文字を削除したいときの方法をサイト等で探していたところ解決のための考え方として新たな知見であったので記録しておきます。
ここでは例として文字列(abcdefghij)から削除したい文字(c,f,g,i,)を、一旦配列($b)として受け取り
str_replaceを使って$bの文字を削除した$aを出力しています。“` php
$a = ‘abcdefghij’;
$b = array(‘c’, ‘f’, ‘g’, ‘i’);
echo str_replace($b, ”, $a);
//出力結果 → abdehj
“`プログラミングを勉強してまだ数か月程度ですが、新たな知見や学習記録などをこれからも投稿していけたらなと思います。
【PHP8.1?】PHPのあらゆる関数を部分適用できるようにするRFC
正直なところ、カリー化や部分適用の有用性が私にはわからないんですよ。
“`php
// 普通の関数
function foo1(int $a, int $b):int{
return $a + $b;
}
echo foo1(10, 5);// カリー化
function foo2(int $a):Closure{
return fn (int $b):int => $a + $b;
}
echo foo2(10)(5);// 部分適用
$foo10 = foo2(10);
echo $foo10(5);
“`読みにくくなっとるだけやん?
関数の再利用とか言うけどそんなに再利用するか?
まあ私の妄言はどうでもいいとして、なんかPHP本体であらゆる関数を部分適用できるようにするというRFCが提出されていました。
以下は[Partial Function Application](https://wiki.php.net/rfc/partial_function_application)の紹介です。# Partial Functio
laravel8に画像をアップロードするやり方➀
laravel で画像を DB にアップロードしてみました。
#laravel に画像のパスを保存するようのテーブルを作成する
まずマイグレーションファイルを作成します。マイグレーションファイルとは、テーブル定義に対する変更内容が書かれるファイルです。基本laravelでは、phpで書かれています。
“`
$ php artisan make:migration create_image_table
“`Laravel におけるマイグレーションは以下のように実現されます。
>1.一意な名前のマイグレーションファイル(テーブル定義に対する変更内容)を作成する。マイグレーションファイルは up と down という2つのメソッドを持つ PHP クラスとして記述される。
2.「どのような SQL をどの順番で実行したか」は migrations テーブルで管理される。migrations テーブルには実行済みのマイグレーションファイル名が格納されている。
3.マイグレーションコマンドを実行すると、ま
データベースとPHPの接続、データベースの中身をPHPを使ってJSONに変える
データベースをPHPで読み込むには
データベース環境は様々だと思いますが、仮想(Dockerなど)php My adminで試してできた方法をメモ程度に載せておきます。
どちらも同じ書き方でできるのでぜひコピペでパソコンの中に入れておいてください。また、最後のほうに複数ファイルでのデータベースを一括で管理する方法も書いておきます。
“`php
select_db(‘*********’);//ここにSQL文を書く。なんでもかけるよ
$sql = “select * from テーブル名”;
$rs = $mysqli->query($sql);foreach ($rs as $val