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

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

PHPの便利な関数(4)

# 概要

* PHPが用意している便利な関数について、忘備録として記載していく。
* また、PHP7系を前提とする。
* 右記
[PHPの便利な関数一覧](https://qiita.com/andota05/items/fc80d2210810a36ec156)
に他の関数について記載した一覧を作成しています。

# ラインナップ

* array_key_exists( )
* sprintf( )
* empty( )
* isset( )
* is_array( )

## array_key_exists( )

* 指定したキーまたは添字が配列にあるかどうかを調べる
* 存在すれば true を返す
* 存在しなければ false を返す

https://www.php.net/manual/ja/function.array-key-exists.php

“`test.php
// keyを持った連想配列を定義する
$array = [
‘id’ => 1,
‘name’ => ‘Taro’
];

// keyに存在するname,存在しないci

元記事を表示

【laravel】laravel+Reactを使ってSPAにしてみる

初書:2021/09/06
mac : 11.5.2
php:v8.0.6
laravel:v8.57.0

# 前書き

最近Reactを知ったのでせっかくならLaravelでも使ってみよう、というメモ。

# 前提

Laravelインストール済み。
[素のPHPしか触ってなかった人がlaravelを触ってみる – Qiita](https://qiita.com/yuu_1st/items/6e8c8b74478de37918eb)

# インストール

まずはuiをインストール

“`zsh
% composer require laravel/ui
“`

その後はuiをreactに変更

“`zsh
% php artisan ui react
“`

インストールとmix

“`zsh
% npm install && npm run dev
“`

もし、`Please run Mix again.`と言われた場合はもう一度`npm run dev`します。

以上

# Typescriptにする

ReactといえばTypescript…と、勝手に思って

元記事を表示

【Laravel】@sectionと@yieldの関係(初心者向け)

#はじめに
レイアウトを作成するにあたって必須の`@section`と`@yield`について簡単に説明します。

#`@section`と`@yield`の関係
`@section`の書き方には、

“`php:index.blade.php
@section(‘セクション名’, ‘画面に表示する値’)
“`
と記述するパターンと、

“`php:index.blade.php
@section(親テンプレートの@yield名)
~~~画面に表示する内容~~~
@endsection
“`
として、親(ベース)となるテンプレートに記述された`@yield(名前)`部分に、`@section`と`@endsection`に囲まれた部分がはめ込まれるというパターンがあります。

#具体例

“`php:layouts/app.blade.php(親となるテンプレート)

@yield(‘title’)

@yield(‘content’)

“`

“`php:menus/index.blade

元記事を表示

【PHP基礎】ページネーションの作り方

#はじめに#
 PHPを使ったページネーションの実装方法について勉強しましたので、備忘録として残していきます。
 ページを遷移させるだけですが、素のPHPで書こうと思うと結構ロジックを考えなければなりません。なるべく丁寧にまとめていきますのでよろしくお願いします。

#ページネーションとは#
 ページネーションとは、ECサイトの商品件数や掲示板のコメントなど件数が多い場合に、一気に表示させるのではなく、ページ遷移を行うことで数件〜数十件ずつ取得していく手法のことです。普段何気無く使っている機能ですが、実装しようとすると結構ロジックを考えなければなりません。
 何か機能を作る場合は、まず言語化することが大切です。今回の場合は下記のように言語化できるでしょう。ECサイトの商品件数を例としてあげていきます。

①商品件数を1〜10件だけ取得する。
②GET通信でページ数の値を与える
③リンクを作成する
④リンク先の値をチェック

このような順序で進めていきます。
それでは実際にやっていきましょう。

##商品件数を1〜10件だけ取得する##
 データベースから商品情報を取ってくる際は、SQ

元記事を表示

PHP タイプヒンティング(型宣言)を記載して引数、戻り値のデータ型を指定する

# 目的

– タイプヒンティングを用いて引数と戻り値のデータ型を指定する方法をまとめる

# 情報

– 下記のサービスを用いて動作確認を行った。
– [https://paiza.io/ja](https://paiza.io/ja)

# 方法

– 下記のように記載することで引数の型を指定する事ができる。

“`php
function 関数名(型名 変数名) {
関数内部の処理
}
“`

– 下記のように記載することで戻り値の型を指定する事ができる。

“`php
function 関数名(): 型名 {
関数内部の処理
}
“`

### 利用できる型(PHPのバージョンにより異なる。下記はPHP7)

| 型名 | 概要 |
| — | — |
| bool | 真偽値 |
| float | 浮動小数点 |
| int | 整数 |
| string | 文字列 |
| array | 配列 |
| callble | コールバック関数 |
| クラ

元記事を表示

【PHP8.1】静的変数を継承したときの挙動が変更になる

細かすぎて伝わらない変更点。

PHPには[静的変数](https://www.php.net/manual/ja/language.variables.scope.php#language.variables.scope.static)という機能があります。

“`php
class A{
public static int $hoge = 1; // 普通のクラス変数

public function foo(){
static $foo = 1; // ← これ
return $foo++;
}
}

$a = new A();
$a->foo(); // 1
$a->foo(); // 2
$a->foo(); // 3
“`

関数・メソッド内でstaticを付けて変数定義すると、その変数値はプログラムが終了するまでずっと保持されます。
イメージとしては、関数ローカルのクラス変数みたいなかんじでしょうか。

そしてこの静的変数、クラス変数と並べてみると動作がほんのり微妙に異なっているんですよね。

“`php
class A
{
public

元記事を表示

Target class [〇〇〇TableSeeder] does not exist. って出てきたときにやったこと。

## 事象
Seederファイルに目的のデータを追加して、
DatabaseSeeder.phpにも追加。
`php artisan migrate:refresh –seed` を実行。

“`
Illuminate\Contracts\Container\BindingResolutionException : Target class [XxxxxTableSeeder] does not exist.
“`
なぜかエラーに。
typoを疑い、探してみるも見つけられず。

## 原因
composerのリロードが必要だったようです。

“`bash
composer dump-autoload
# リロードした後に再作成。
php artisan migrate:refresh –seed
“`
今度は問題なく再作成することができました。
〜〜 does not exist のようなエラーは、変にググるよりキャッシュを疑った方が効率的ですね!

“`bash
php artisan cache:clear
php artisan config:clear
php

元記事を表示

【Laravel】Bladeで共通で参照できるグローバルな変数を定義する。

自分用のメモとして残します。

各コントローラでわざわざviewに渡す変数を定義するのは面倒。
AppServiceProviderのbootメソッドで、全てのviewで参照できる変数をに定義する方法をメモ。
#やり方

“`app\Providers\AppServiceProvider.php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Auth;

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}

/**
* Bootstrap any application services.
*
*

元記事を表示

【令和も対応】PHPで和暦⇔西暦変換

西暦を和暦に変換する処理を書く機会があって、また必要になるかも。
と思い、汎用的に使い回せるよう、関数を作成してみました。

PHPで、西暦⇔和暦変換をする機会のある方は、参考にしてください。
そんな難しくないです。

#PHPで西暦 → 和暦

“`php:wareki.php
// 西暦 => 和暦
function wareki($year) {

$eras = array(
array(‘year’ => 2018, ‘name’ => ‘令和’),
array(‘year’ => 1988, ‘name’ => ‘平成’),
array(‘year’ => 1925, ‘name’ => ‘昭和’),
array(‘year’ => 1911, ‘name’ => ‘大正’),
array(‘year’ => 1867, ‘name’ => ‘明治’)
);

foreach($eras as $era) {

$base_year = $era[‘y

元記事を表示

【PHP】余り計算の活用方法

“`PHP

4 % 4 余りは0

3 % 4 余りは3

2 % 4 余りは2

1 % 4 余りは1

0 % 4 余りは0

“`

元記事を表示

Laravel ミドルウェアでIP制限をする

開発環境等、IPでアクセス制限をかけたい場合
例えばAWSを使っていればセキュリティグループでIP制限をかけたりします。

しかしIP制限をかけるエンドポイントを柔軟に変更したり、複雑な条件によってIP制限をかけたりしたい場合はLaravel側でIP制限をかけた方が良い場合があります。

## 環境

– PHP 8.0.10
– Laravel 8.58.0

## ミドルウェアを作成する

– [Laravel 8.x ミドルウェア](https://readouble.com/laravel/8.x/ja/middleware.html)

“`shell-session
$ php artisan make:middleware Firewall
“`

Laravelではリクエストの検証、フィルタリングする場合はミドルウェアという便利な機能が用意されています。
IP制限をかけるので名前は`Firewall`にしてみました。

“`php:app/Http/Middleware/Firewall.php

元記事を表示

Laravelで”could not find driver”が発生する原因(MySQL)

##原因

PHPとデータベースサーバー間を接続するPDOドライバが見つからないこと。

##解決

php.iniファイル(939行目)のコメントアウトさせたコードを直す必要があります。
windowsであればwhereコマンド、Linuxであれば、whichコマンドでphp.iniのpathを調べてください。

“`php:Command
where php.ini
//windowsの場合

which php.ini
//Linuxの場合
“`
次に以下のコードを直します。

“`php:php.ini
//extension=pdo_mysql
“`

“`php:php.ini
extension=pdo_mysql
“`

##結論
PHPとデータベースサーバー(今回はMySQL)を接続するPDOドライバが使えていませんでした。

元記事を表示

Laravel で長いコールバック関数を関数化する方法

## この記事について

関数を関数化するって意味がわからないですが、適切なタイトルがわからなかったので、こうしました。本文を読んでいただければ言わんとすることはわかってもらえると思いますので適切なタイトルが思いつくまではこれでいきます(どなたか適切なタイトルを思いついたらコメント欄にて教えてください)。そもそもこれは Laravel 関係なくて PHP のトピックですが、Laravel 使ってるとやたらコールバック関数を使うので、Laravel を使うなら知っておいたほうがいいトピックだと思ったのでタイトルに Laravel と入れました。

要は、コールバック関数をメソッドなりクラスなりに移して、引数部分をシュッとしたいというときにどう書けるか、ということです。

Laravel 上でコードを書いてるとコールバック関数を使う場面が多いですが、引数にそのまま無名関数を渡すことがほとんどだと思います。ときどきその関数が長くなって可読性が低いコードを見かけるので、あまりに長いやつはメソッドなり外部クラスなりに移動したほうがいいんじゃないかと思っていて、PHP では `callable`

元記事を表示

【PHP】foreachで最初と最後を判定する

# 最初に

PHPをforeach文は中身を順に取り出してくれるので便利ですが、for文のようにループカウンタとして使う値がないため、「n番目」の値を取り出すというのは少し工夫が必要です。

今回は、そんなforeach文で、最初と最後を判定する方法をまとめました。

# reset()とend()を使う

検索するとよく出てくるやり方で[す。

[reset()](https://www.php.net/manual/ja/function.reset.php)は、配列のポインタを配列の要素の先頭に、[end()](https://www.php.net/manual/ja/function.end.php)は配列の要素の最後にセットします。
[ポインタとは](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0))

これを使うことによって、foreachで取り出された一つ

元記事を表示

git push の際にpre-receive hook decliedというエラーが出たときの対処

#環境
OS: Windows10

“`console
$ php -v
PHP 8.0.9 (cli) (built: Jul 29 2021 14:12:27) ( NTS Visual C++ 2019 x64 )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologies

$ chocolatey -v
0.10.15

$ php artisan –version
Laravel Framework 7.30.4
“`

#事象
Herokuにアプリを作成してgit pushしようとしたら以下のエラーが発生してpushが完了できない。

“`console

// 省略
remote: ! Push failed: cannot parse Procfile.
remote: ! Please try pushing again.
remote: ! If the problem persists, see https://help.h

元記事を表示

【超基本データベースの話】PDOクラスとは

#はじめに#
 バックエンドエンジニアを目指されている方にとっては、データベースは必須の知識になります。今回はデータベースの超基本的なお話とPHPで使われるPDOクラスというものについてまとめていきたいと思います。

#データベースとは#
 データベースとはさまざまなデータを保存し、必要な時にすぐに使えるように整理したものです。例えば、ログイン認証や商品情報登録などで使われます。データベースを用いることで、膨大なデータを保存できる上、それらを並べ替えたりグループ化したり必要な形式に加工して取り出すこともできます。

 データベースにも色々種類があるようですが、ここではRDB(リレーショナルデータベース)を取り上げていきます。RDBとは表形式のデータベースで、エクセルのように列と行から成り立っています。列には、どんなデータが保存されてるかを表す”カラム”と呼ばれるものが設定されており、それぞれの行に対応したデータが保存されています。これらの列と行のまとまりを**テーブル**と言います。データベースは通常、複数のテーブルから成り立っています。

##使用例##
 例えば、ショッピングサイ

元記事を表示

呪術廻戦で俺が学ぶMySQL②【PHP】

こんにちは!
先日、呪術廻戦で俺が学ぶ[MySQL①【PHP】](https://qiita.com/hayatoganbaru/items/f9ae47370cce8b8ec4a6)をアップしましたが、
今日はその続きです。

さらに新しいことをアウトプット、前回の記事より理解度が上がった箇所は
もう一度ディグってみます。
そもそもデータベースとは?SQLとは?とか突かれると
答えられなくて泣きながら走って逃走する自信しかないので
ちゃんと言語化できるように今度記事にしてまとめます(絶対やる)

# カラムを追加

![スクリーンショット 2021-09-05 11.13.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1435543/cbce6125-c5ae-80d2-7fe0-56bbccd7e575.png)

前回よりデータ増やしました。
ちなみに僕の好きな術式は投射呪法です。
ちょっと領域展開がなさそうなのが不安ですが、
僕なら投射呪法を会得したいなあ。

例えば上図のmagician

元記事を表示

LAMPってなんぞや

PHP勉強中にDockerで詰まったから、Linuxとかサーバー回りをちゃんと知ろうと思った。
ある程度調べてたつもりだけど、思ってたより分かってなかったからまとめておく。

:::note info
L・・・Linux:サーバーとして機能させる。(OSとしても使える。)
今回はCentOS8を導入。試しにGUI入れたら悪くなかったのでワンチャン普段使いできる?

A・・・Apache:ブラウザからアクセスを受けたときに、HTMLを返してくれる。
サーバー側で動くので、Linuxに入れておく。

M・・・MySQL:データベース
データを格納するくらいの認識しか出来てないから勉強しなきゃ…

P・・・PHP:だと思ってたけど昔はperlだったみたい。最近はPythonかな。
:::

LA部分がボヤっとしてたから、多少すっきりできたかな?

元記事を表示

【3枚目】おっさんが入門CakePHP (動画第4回)

今回の動画ではControllerとViewを使って文字を画面に表示するらしい。

【CakePHP3】ControllerとViewで画面表示【入門】

最初はMVCモデルについて説明。
分かり易く図示してくれてる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/694662fd-7765-650b-024a-42510850aacd.png)

今回はエディタとしてATOMを使用するとの事だが、ATOMのインストールについては説明がないので一応貼っておく。  ※他のエディタを使っても何も問題は無い。
ココからDownload → https://atom.io/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/841a6699-a0ee-2d8

元記事を表示

Laravelでuuidをidとするモデルを作りたいとき

LaravelのEloquentモデルのidは通常数値なわけですが、uuidを使いたい!といった場合があると思います。

そういった場合、

“`php
$post = new Post();
$post->id = Str::uuid();

$post->save();
“`

といった形を取るかもしれないのですが、もっと良い形で書く方法があって、それはイベントを利用する方法です。

“`php
class Post extends Model
{
protected static function booted()
{
static::creating(function(Post $model) {
$model->id = Str::uuid();
});
}
}
“`

このように書くことによってidをセットしてなくとも作成しようとするときに自動的にuuidが作成されて保存されます。

オブザーバークラスを作る方法もありますが、これくらいであればそのまま書いて良さそうです。

この辺

元記事を表示

OTHERカテゴリの最新記事