PHP関連のことを調べてみた2021年05月18日

PHP関連のことを調べてみた2021年05月18日

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%A5

Laravel での使用例です。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 223

Fatal 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