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

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

MAMPでのtimezone設定

#はじめまして
プログラミングの初学者ですが、学習する際につまずいたことや間違えてしまったことなどを、Qiitaにまとめていこうと思います。

同じように失敗してしまう方の参考になれば幸いです。

##PHP+MySQL入門講座
プログラミングの学習には、主にUdemy を使用しています。最近では、たにぐちまことさん(@seltzer)の動画を見てPHP やMySQL、WordPressについて学習しています。

初めに、WordPress開発マスター講座を受講し、初学者にも分かりやすく説明が丁寧でしたので、別の講座も受講することにしました。それが、【PHP】標準入力からの繰り返し【メモ】

# 自分用のメモです。
paizaのPHP基礎問題。

“`php

元記事を表示

Laravel6系でゲストログイン機能(かんたんログイン)の実装

#はじめに
本記事では、ログイン時に`ユーザー名`や`パスワード`を入力しなくても、
ワンクリックでゲストユーザーとしてログインできる**「ゲストログイン機能」**の実装方法をご紹介します。

転職活動用のポートフォリオ等にゲストログイン機能があると
多忙な採用担当の方の負担が減り、アプリを利用してもらえる確率が高まりますよ!

#事前準備

ゲストログイン機能の実装の前に、以下が予め準備されていることが前提となります。

①ログイン機能の実装されている
②ゲストログイン用のユーザー(ゲストユーザー)の登録されている
 → 例)ユーザー名:`ゲストユーザー`
     メールアドレス:`guest@guest.com`
③DBにusersテーブルがあり、passwordカラムが定義されている
④Userモデルが作成されている

#実装内容

ログイン機能とゲストユーザーの準備ができたら、いよいよ実装に入ります。
ご紹介する実装内容は割と簡単で、以下になります。

– ゲストログインの処理を記述(Controller)

– ルーティングの設定(web.php等)

– ログイン画面

元記事を表示

CodeIgniter4でREST APIを実装する

CodeIgniterに入門した。CodeIgniter4の公式Tutorialをやった後、REST APIの実装を試みた。調べてみると、CodeIgniteでREST APIを実装するなら、Rest_Controllerらしい。composerでインストールしてみたが、動かず。

結論、RestControllerはCodeIgntier3用。CodeIgniter4はサポートしていない。

CodeIgniter4にはResourceControllerなるREST API用のControllerが標準で用意されているので、そっちを使うべしということだと思われる。

詳しい説明を書いてくださっている[サイト](http://blog.a-way-out.net/blog/2020/12/20/codeigniter4-rest-api/)を発見。

# 参考にしたサイト
– [CodeIgniter4の公式Tutorial](./https://codeigniter.com/user_guide/tutorial/index.html)
– [CodeIgniter Rest

元記事を表示

【環境構築】Laravelの初期設定について(Mac版)

#まずはLaravelでプロジェクトを作成する
①Applications/MAMP/htdocs下でlaravelプロジェクトを作成
下記コマンドによって基本的な雛形は作られる。

“`csharp:Applications/MAMP/htdocs
$ composer create-project “laravel/laravel=6.*” todo_app
“`
実行すると開発に必要な雛形がインストールされていく。
(イメージは下記の通り。長文になるので初めだけ記載)

“`csharp
Creating a “laravel/laravel=6.*” project at “./todo_app”
Installing laravel/laravel (v6.20.0)
– Installing laravel/laravel (v6.20.0): Downloading (100%)
<以下省略>
“`
②簡易サーバーを立ち上げ、念の為動作確認

“`csharp:todo_app
$ php artisan serve
Laravel developm

元記事を表示

データベースの検索条件をまとめる Database Query クラスを生成する Laravel パッケージ作った

## はじめに
タイトルのとおりではあるのですが、[laravel-database-queries](https://packagist.org/packages/imunew/laravel-database-queries) というパッケージを作ってみました。

ソースコードは[こちら](https://github.com/imunew/laravel-database-queries)です。
`composer require imunew/laravel-database-queries`で導入できます。

## 動機
`Laravel`には、[Global Scopes](https://laravel.com/docs/8.x/eloquent#global-scopes) という仕組みがあり、検索条件をひとつのクラスにまとめることができます。
`Scope`クラスは、`Illuminate\Database\Eloquent\Scope`インターフェイスを`implements`し、`apply`メソッドを実装するだけのシンプルなクラスです。

“`php
name

元記事を表示

【PHP】メソッド内で関数の呼び出し Fatal error: Call to undefined functionエラー

メソッド内で関数を呼び出そうとすると、「Fatal error: Call to undefined function…(未定義の関数を呼び出そうとしている)」というエラーになります。

“`.php

//Fatal error: Call to undefined function…
class Example
function a(){
echo ‘Hello’;
}
function b(){
a();
}

“`

メソッド内で異なるメソッドを呼び出す場合は、「$this->メソッド名()」と明記するとエラーを解決できます。

“`.php

class Example
function a(){
echo ‘Hello’;
}
function b(){
$this->a();
}

“`

元記事を表示

Laravelで正しくルーティングしているのに404エラーが出る時

#原因
**public以下に同名フォルダやファイルがある(場合がある)。**

Laravelでは実在するディレクトリへ優先的にアクセスされるので、

“` php
Route::get(‘/dir/file’, function () {
return view(‘dir.file’);
})->name(‘dir.file’);
“`
このようにルーティングしておき、`https://domain.com/dir/file`へアクセスするとき、

`/public/dir/`というディレクトリが存在していると、
`/public/dir/file`という**実在するファイル**を探しに行ってしまう模様。
当然、`file`などという実ファイルは設置していないので404エラーになる。

#解決方法
・public以下の同名フォルダやファイルを削除またはリネームする
・競合しないPATHに変更する

#あとがき
一部のURLだけ404になる場合などは、上記のような原因が多いと思います。

「Laravel 404 route」などで検索しても、次のような原因のものばかりだ

元記事を表示

【PHP学習メモ】class定義のポイント

class定義、難しいですよね。
まだまだ綺麗なコードには程遠く、コツコツコードを書く日々です。
今回は、class定義のポイントを箇条書きでまとめました。
初学者故に間違いやツッコミどころがあるかもしれません。
ご意見やご指摘がありましたら、お気軽にコメントを頂けましたら幸いです。

【class定義のポイント】
・変わらない値は定数にする。
・定数を多数設定する場合は、項目毎で改行すると見やすい。
・メソッド内で、echo・改行しない。
・1つのメソッドには、1つの機能を持たせる。
・重複する処理はまとめる。
・プロパティに設定するのは、モノが持っている情報。
・外からアクセスする必要のないものは、privateにする。
・ずっと同じ値を扱う場合は、コンストラクタで設定する。
・プロパティの値を上書きするようなことは、コンストラクタ以外では、できる限りやらない。

元記事を表示

【PHP】【初心者】in_arrayを正しく使うために

##軽い気持ちで使うと怖いin_array
PHPのin_arrayという関数はご存知でしょうか。
値と配列を比較して、配列の中に値が入っていればtrue、入っていなければfalseを返す関数です。
軽い気持ちで使って渋い思いをしたので、自分への戒めも含めた投稿です。

##かんたんにまとめると
in_arrayの第3引数に

* true を入れると演算子===での比較
* false もしくは なにも入れないと演算子==での比較

##試してみると
それぞれの演算子の比較がどう違うのかは[ここ](https://www.php.net/manual/ja/types.comparisons.php)を確認しましょう。
そちらのページの「==による穏やかな比較」という項目にて

“`php
“PHP” == 0
“`
これがtrueとなることが確認できます。とっても穏やかな比較ですね。つまり、

“`php
$array = [“PHP”, “Hoge”, “PHogeP”];
in_array(0, $array);
“`
こうするとtrueになりました。
だから、

元記事を表示

【初心者】【PHP】strlenとmb_strlenを勘違いした話

##結論
初心者が調子づいてきた頃にやりがちだけど、
具体的な言葉で検索しようね、そして説明はよく読もうね! と言う話。

##詰まりの始まり
私がPHP開発をしていたある日、処理の中で文字列の文字数カウントが必要になりました。
##「PHP 文字列 長さ」で検索する
すると出てきたのは

* 文字列の長さを取得(strlen, mb_strlen) →というまとめ記事
* strlen – Manual – PHP →というPHP公式ページ
* mb_strlen – PHP →PHP公式ページ

それを見た素人はこう思いました。
###「ははーん、strlenを使えばいいんだな?」
殴りたくなる思考回路ですが、こんなクソとぼけたゴミがいるのも事実です。

**そんな複雑ではない関数だろう**と思い込み、
公式の説明など読まないままstrlenを自分が作成していた処理に当て込みました。

##一向に想定とは違う動きをするstrlen
“`php5
strlen(‘あいうえお’);
“`
5を返すはずのこの関数、

“`php5
int(15)
“`
一向に3倍の文字数を返すの

元記事を表示

phpの仕様メモ

phpの変数名は大文字小文字を区別する

元記事を表示

laravel DBファサードのstatementメソッドが書いてある場所を探してみた

# 目的

– DBファサードのstatementメソッドを使用する機会があり当該メソッドは内部でどのような処理をしているのか気になりまずはメソッドが記載されている場所を探してみた

# 環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/

元記事を表示

※学習用メモ デザインパターン:Singleton編[PHP]

# Singletonパターンとはどういうものか

Singletonとは**一つのもの**という意味です。

>Singleton パターンとは、そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのことである。(wikipediaより)

ポイントとしては、**指定したクラスのインスタンスが1つしか存在しないことを保証する**ということです。

インスタンスの状態を保持したかったり、クラス間で共通のメソッド・プロパティにアクセスしたい場合に使用されることが多いです。

# Singletonパターンを用いるメリット

・同一インスタンスを使いまわすので、インスタンスの状態を保持したまま他の箇所で使用できる

[参考]
https://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
https://qiita.com/shoheiyokoyama/items/c16fd547a77773c0ccc1
https://www.techscore.com/tech/Desig

元記事を表示

phpの比較演算子「==」は予想外の動きをするで!比較は「===」を使おう

### 比較演算子「==」は型変換を自動で行ってしまう。
型の扱いが非常に曖昧であることで有名なPHPでは、他の言語と同じく「==」を使って比較を行うと、**型変換を勝手に行って比較**を行ってしまいます。

https://www.php.net/manual/ja/language.operators.comparison.php

“`

元記事を表示

PHPでデータベースにアクセスする方法

PHPでデータベースにアクセスするコードを書き留めておきます。

##まずは接続のセットアップをします

“` PHP
setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
//例外処理対応を有効にする
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERR

元記事を表示

PHPをvscode remote containerで開発したかった

はじめLaravel入れていたが、template的に使えるものが欲しかったので作った。

https://github.com/moeyashi/template-php-on-vscode-remote-container

Laravel入れたバージョンも作ろうかなと思います。

## 2020-01-02 追記

Laravel入れました。勢いあまってlaravel/ui authまで入った。

https://github.com/moeyashi/template-laravel-on-vscode-remote-container

元記事を表示

【PHP学習メモ】preg_match 定数の指定

あけましておめでとうございます。
あっという間に2021年ですね。
善き一年になりますように。

【今日の学び】
preg_match は、正規表現によるマッチングを行うことができます。

““
【構文】
preg_match ( string $pattern , string $subject [, array &$matches = null [, int $flags = 0 [, int $offset = 0 ]]] ) : int|false
““
引数 $pattern には、検索する文字列を、 $subject には、検索対象の文字列を、[] 部分はオプションで省略可能です。

〜PHPマニュアル〜
https://www.php.net/manual/ja/function.preg-match.php

今回学んだのは、検索する文字列に、『定数』を指定する方法です。

““
・・・省略・・・
// 定数
const THREE_TIMES_RATIO_DAY = 3;
const FIVE_TIMES_RATIO_DAY = 5;

・・・省略・・・

元記事を表示

dockerに苦労した話

# 今回の教材
[Laravelでテスト駆動開発を学ぼう!](https://www.techpit.jp/courses/92)

# 課題に取り組む前にLaravelのMigrateで沼にハマる
## Reset
docker desktop のアンインストール
スタート -> 設定 -> アプリ(ふつーに消えてくれる)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94562/aab44340-803a-9af5-8b81-adf328c3831e.png)
explorerで普通に消そうとするとブルースクリーンが出て再起動になり、永遠に消せない(この時代にブルースクリーンなんて久しぶりに見たわ…)。powershell管理者モードでバチンと消すしか無いらしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94562/b8e2c71b-8b2e-cfe3-1ef6-af13c89

元記事を表示

型宣言についてまとめる

これまでしてこなかった型宣言について
公式の内容を纏めて自分なりに解釈してみました。

参考: [PHP.net](https://www.php.net/manual/ja/language.types.declarations.php)

#なぜ型宣言をするのか?
そもそもの型宣言とはなにか?
>関数のパラメータや戻り値、 クラスのプロパティ (PHP 7.4.0 以降) に対して型を宣言することができます。 これによって、その値が特定の型であることを保証できます。 その型でない場合は、TypeErrorがスローされます。

自分なりに解釈すると
パラメータや戻り値が定義されていることで求めた型以外が参照された場合に
エラーを返すことによって大きなバグになることを事前に防いでいるのかと考えます。
またバグ出た際の原因追求もしやすくなるのかなと思います。

わかりやすく言うと
スーパーとかがイメージしやすいのかなと!
お酒コーナーにはお酒をおいてあるのでそこから持ち出したら
もちろんお酒を持っていくことになりますよね!
お菓子コーナーから商品を持ち出したらそれはもちろんお菓子です。

元記事を表示

OTHERカテゴリの最新記事