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

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

php7.3からの新関数array_key_firstとarray_key_lastについて

配列の最初のキーを取得する際に
php7.3から**array_key_first*という関数が追加されました。

“`php
1, ‘b’ => 2, ‘c’ => 3];

$firstKey = array_key_first($array);

var_dump($firstKey);
?>
“`

“`
– 出力結果
string(1) “a”
“`

php7.2以前は配列の先頭要素を取り出そうとする際には
配列をreset()して…keys()で指定して取り出す…というようなことをしていましたが
この関数があれば配列の内部ポインタを変更する必要もなく一発で取得できるので便利ですね。

参照
https://www.php.net/manual/ja/function.array-key-first.php

元記事を表示

Laravelのバリデーションで、正規表現のパイプが使えない件

# Laravelのバリデーションで、正規表現のパイプが使えない件

### Laravelのバリデーション
Laravelには、いくつかのバリデーションルールが用意されており、パイプ区切りで実行したいルールをvalidateメソッドへ渡すことで、複数のルールを利用することができる。

[バリデーションルールの例]

| ルール | 説明 |
|:-:|:-:|
| email | フィールドがメールアドレスとして正しいことをバリデートする |
| ipv4 | フィールドがIPv4アドレスの形式として正しいことをバリデートする |
| required | フィールドが入力データに存在しており、かつ空でないことをバリデートする |
| regex | フィールドが指定された正規表現にマッチすることをバリデートする |

“` php:sample.php

// バリデーションの利用例(パイプ区切り)
$validateRules = [
// 必須入力, 英数字のみ
‘user_name’=>’required|regex:/^[0-9a-zA-Z]+$/’,

元記事を表示

PHP foreach文まとめ

# 目的

– foreach文の書き方をまとめる

# 書き方の例

– foreach文は配列や連想配列に対し、先頭のデータを使用して順にループ処理を実行する。
– 下記にforeach文の書き方を記載する。(変数`city`には任意のデータが格納されているものとする。)

“`php
foreach ($city as $キー名 => $キー名にリンクする配列に格納された値が格納される変数){
ループで実行される処理
}
“`

“`php

foreach ($city as $配列が順に格納される変数名){
ループで実行される処理
}
“`

# 具体的な書き方の例

– 連想配列`$scores`には任意のキーが設定されており、それぞれ任意の値が格納されているものとする。

“`php
//連想配列定義
$scores = array(“数学IA” => 70,
“化学A” => 90,
“世界史B” => 85
)

//ループ処理
foreach ($scores as $key =>

元記事を表示

Magentoで商品ページURLに絶対にカテゴリパスを付けない方法

Magento2系で開発をしていると、商品ページへの導線を設置しないといけないことがあります。
ところが、正直に商品データを取ってきてURLを取得すると、商品が所属するカテゴリのパスがURLについたりつかなかったりすることがあり、キレイに1つに定まらないことがあります。
もちろんMagentoではCanonical URLの設定を有効にしておくことで重複URLをGoogleから指摘されることはなくなるが、URLがブレるのはなんだかとても釈然としない思いをします。
(これはたとえ設定で商品URLにカテゴリパスを付けない設定にしていても起きます)

#普通に書くとどうなるか

何も考えずに商品データからURLを取得すると、以下のようになることが多いでしょう。
($this->productRepositoryは\Magento\Catalog\Api\ProductRepositoryInterfaceを利用するクラスにDIしている前提)

“`
$product = $this->productRepository->get($sku);
$url = $product->getPro

元記事を表示

【 Laravel 】Laravel DB.comで『 CRUD簡単作成 』を解説

#Laravle DB.com を使って 「 ER図 → CRUD生成 」を試す!
以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

###前提条件

– Laravelで環境を作ったことがある人(とりあえず動作するまで)
– Laravelの基本を理解している人(つもりの人)
– 確認環境:Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)


#### メリット
– CRUDを自動生成!
– 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
– どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!

###【 LaravelDB.comへ ログイン 】
[ LaravelDB.com ](https://laraveldb.com/)
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜

元記事を表示

PHPの言語仕様の理解を深める特殊な立ち回り

こんにちは!

先日の年始に、
[FFmpegを使ってルパン三世タイトルジェネレーターをPHPで書いてみた](https://qiita.com/huuya/items/a4a8022e19bfe87322db)
を書いたばかりですが、今日はPHPの言語仕様を追った特殊な立ち回りについてお話します!

`この記事で扱う使用例はあくまで言語仕様の理解を深めるためのサンプルコードとして記述しています。`

## 環境

### 動作確認済環境

– macOS Catalina : “10.15.2“
– PHP : “7.3.1“

## 言語仕様の理解を深める

### 目次一覧

– [String型の文字列からfor文で1文字ずつ取得する](#string型の文字列からfor文で1文字ずつ取得する)
– [条件式の評価](#条件式の評価)
– [論理演算子の仕組み](#論理演算子の仕組み)
– [可変変数](#可変変数)
– [可変関数](#可変関数)
– [可変クラス](#可変クラス)
– [三項演算子](#三項演算子)
– [エルビス演算子・エラー制御演算子](#エルビ

元記事を表示

【デザインパターン】PHPでStrategyパターンの実装をしてみた

# 環境
– PHP 7.2.18

# はじめに
今更ながら、デザインパターンを真面目に理解し始めようとしている2年目エンジニアであります。
まずは事始めに「Strategyパターン」から勉強していこうと思い、この記事を書きました。
普通はJavaで勉強すべきだと思うのですが、Java初心者すぎるので、一番触っているPHPで勉強しています。
ちなみに、会社のブログでも同じような記事を書いたので、ここに貼っておきます。
[レガシーコードをぶっ壊す!〜基本のキ編〜](https://techblog.istyle.co.jp/archives/4475)

# Strategyパターンとは
Strategyとは、「戦略」や「作戦」という意味を持ちます。
この「戦略」や「作戦」毎にクラスを分割して、簡単にそれらを切り替えることができるのが特徴です。
共通のインターフェースを定義し、クラスを使う側(以下クライアント)はそれに伴った処理を実行するので、クライアントは具体的な実装に依存しなくなります。
strategyパターンのクラス図は以下のようなものです。
コードレビュー前の確認事項(初心者)

初心者の自分が何度もやってしまったコードレビューでの指摘事項をまとめていきます。
コードレビューしていただく先輩の時間を無駄にしないために、是非参考にしていただければと思います。

### DBアクセスの回数
DBアクセスは可能な限り少なくするのが、得策です。

“`php
$stmt = $pdo->query(‘SELECT * FROM users WHERE id = :id;’);
for ($i = 1; $i < 6; $i++) { $stmt->bindValue(‘:id’, $i, PDO:PARAM_INT);
}
“`

“`php
$stmt = $pdo->query(‘SELECT * FROM users’);
“`
極端ですが、上の例では、`for文` でループしているため、`5回` もDBにアクセスしています。

1度にまとめられるものを、無駄に2回、3回、DB接続してしまうと通信量の無駄遣いになってしまいます。

### ファイル末尾の改行
ファイル末尾の改行も見落としがちな点です。
コーディングの作法とよく言われますが、詳

元記事を表示

【初学者向け】セキュリティ対策入門⓪〜環境構築編〜

# 前提

## 確認環境

– OS: macOS Mojave バージョン 10.14.6
– Docker: version 19.03.2
– docker-compose: version 1.24.1

## 本シリーズの目的

**実装時に最低限気を付けた方がいいセキュリティ対策について理解してもらうこと**です。

セキュリティは非常に奥が深い世界です。僕自身セキュリティの全てを完璧に理解しているわけではありません。しかし、プログラミングする上で最低限気をつけるべきことについては知見が溜まってきました。なので、このあたりで放出していきたい所存です。『これさえやればセキュリティ完璧』というより『最低限これは意識しておいた方がいいよ』という温度感で整理できればと考えています。

## 本記事の目標

**本シリーズを通して学習していくための環境構築を終えること**です。

実際にソースコードを見て動かして云々するのが一番だと思っているので、それを行うための環境を構築するまでが本記事で扱う内容です。

## 本記事を読み進める上での必要事項

– ターミナルを最低限操作でき

元記事を表示

LaravelでJSON型のカラムを操作する

#MySQLでJSON型っていうのがあるらしい
データベースの設計で「う~ん」と悩みながらググっていると
MySQLにはJSON型というのがあるらしい。
確かどこかの本でデータベースに配列を1つのセルに格納するのはアンチパターンというのを読んだ気がするのだが
どうやらちゃんとJSONデータ内部のクエリもちゃんとできるんだとか…。
でもMySQL5.7くらい以上じゃないと対応していないらしい。
MariaDBは10.2以上が対応みたい。

#Laravelで上手く扱えるの?
でもこの世はLaravel以外は人権の無い時代。
Laravelが対応してなきゃ、SQL力が試されることになるが…

もちろんちゃんと対応してた、やっぱLaravel神だは。

#migrationの書き方

“`php
public function up()
{
Schema::create(‘table_name’, function (Blueprint $table) {
$table->json(‘json_type_column’)->nullable()->default(‘

元記事を表示

PHP 最初から存在する関数まとめ

# 目的

– 最初から組み込まれた関数の使用方法をまとめる

# 書き方の例

– 引数で与えられた文字列の文字数を返す組み込み関数`strlen`の書き方を記載する。

“`php
echo strlen(“文字数を調べたい文字列”);
“`

– 引数で与えたれた配列の要素の数を返す組み込み関数`count`の書き方を記載する。

“`php
echo count(配列名);
“`

– 指定したレンジの中からランダムな数字を返す組み込み関数`rand`の書き方を記載する。

“`php
echo rand(下限,上限);
“`

# 具体的な書き方の例

– 文字列`miriwo`の文字数を出力する処理を下記に記載する。

“`php
echo strlen(“miriwo”);
“`

– 変数`name`に格納された文字列の文字数を出力する処理を下記に記載する。

“`php
echo strlen($name);
“`

※この他にも、配列の要素の数を返す関数やランダムな整数を返す関数など様々な組み込み関数が存在する。

元記事を表示

Dockerを使ったCentOS + Apache + PHP + freetds 開発環境構築

## この記事を書き始めたきっかけ
嬉しいことに、弊社もだんだんと人が増えて賑やかになってきました。
そこで、入社してすぐにやることといえば、開発環境構築ではないでしょうか。
今までは、Parallels DesktopやVirtualBoxを使って仮想OSをインストールして、各種設定ファイルをvimで編集して、・・・
結果、新人さんのPCで動かない。自分の環境では動くのになんで!?みたいなことが発生するのは容易に想像がついてしまうんですよね。

そこで、少ない手順で、同一環境を構築できるようにとDockerを使って開発環境してみようと思います。
これで、今後新しいエンジニアさんが来ても↑の結果のようなことにならない・・・はず。

## 検証環境
– MacOS X Mojave 10.14.6

## 手順
1. Docker for macのインストール
以下のリンクからDocker Desktop for Macをインストールする。

https://www.docker.com/products/docker-desktop

2. Dockerfile,各ソフトウェアの設定フ

元記事を表示

Windows10にcomposerを手動でインストール

Windows用のインストーラーは用意されているが手動で入れたい場合

https://getcomposer.org/download/
### インストール

“`bash
# PHPがインストールされている事が前提です。
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;”
php composer-setup.php
php -r “unlink(‘com

元記事を表示

SELECTとINSERTをいっぺんにやる

PHPからDBにデータを登録する際に、該当のIDを持つデータが既に登録されていなければ新規にINSERTする場合、
一度SELECTクエリを発行し結果を見てINSERTではなく一度で行いたい。
そんなときのメモ

“`
$user_id = ‘12345’;
$first_name = ‘姓’;
$last_name = ‘名’;

“INSERT INTO user (user_id, first_name, last_name, del_flg)
 SELECT “.$user_id.”,”.$first_name.”,”.$last_name.”,”.”0″.
“WHERE NOT EXISTS(
SELECT ‘X’ FROM table_A WHERE user_id = “.$user_id.” AND del_flg = 0
)”
“`
あとはDBに対してこのSQLを発行すればOK。

元記事を表示

Google Cloud Vision API をPHPから使用する場合に出るエラーの対処

Google Cloud Vision API のドキュメント「クライアント ライブラリ」( https://cloud.google.com/vision/docs/libraries?hl=ja ) の手順でPHPから実行して次のようなエラーが出る場合、

“`
Fatal error: Uncaught DomainException: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information in /path/vendor/google/auth/src/ApplicationDefaultCredentials.php:168
“`

行頭に次を追加する。

“`
putenv(“GOOGLE_APPLICATION_CREDENTIALS=キー生成時のJSONファイルのパス”);
“`

上記の他に発生するエラーの対処方法
・次でイン

元記事を表示

?【CakePHP2】textareaの初期値に先月の初日と末日を設定する

## 環境

PHP 7.2.21
CakePHP 2.10.18

## やりたいこと

CakePHPのフォームヘルパで作るテキストボックスの初期値に先月の初日と末日をデフォルトで入力しておきたい

## やったこと

defaultオプションを追加し、それぞれ以下の値を設定

先月月初 : date(‘Y-m-d’, strtotime(‘first day of previous month’))
先月最終日 : date(‘Y-m-d’, strtotime(‘last day of previous month’))

“`Hoge.ctp
Form->input(‘start_date’, [
‘id’ => ‘start_date’,
‘type’ => ‘text’,
‘class’ => ‘datepicker’,
‘div’

元記事を表示

習熟過程の整理

# 習熟過程の整理

##習熟するべき大項目

### プログラマとしての基礎教養

Early exitなどコーディング規約の把握

工数や進捗管理の理解

コンパイラ言語とインタプリタ言語

バブリングとキャプチャリング

検索のレベルと粒度の決定力

技術の検索の為、正確な名称を知っていること

タイピング

思考の段階化、問題に対して仮説の立証と検証、

### ローカルPC環境構築

LinuxなどOSの設定と操作

– bashなどのOS操作用言語の習熟

editer(開発ツール)の最適化(カスタマイズ)

workspaceごとの設定

作業ディレクトリの配下で(xxx.app/).vscodeファイル作成setting.jsonを作成、設定を書き込んで反映する。

– 開発ごとのカスタマイズ(設定)

– 開発効率向上の為,

元記事を表示

PHP while文まとめ

# 目的

– while文の書き方をまとめる

# 書き方の例

– while文は条件式がtrueの場合に無限に当該処理をループ実行する。
– 回数以外の条件に応じた繰り返し処理を実行する。(if文と一緒に使用した場合)
– 下記にwhile文の書き方を記載する。

“`php
変数の初期化;
while (ループ処理の条件){
ループで実行する処理;
変数の更新;
}
“`

# より具体的な例

– 変数`$i`に3の倍数が格納されている時のみ出力する処理を下記に記載する。

“`php
//変数の初期化
$i = 1;

//ループ処理を$iが100になるまで実行する
while ($i <= 100){ //$iを3で割った時のあまりが0になる時 if ($i % 3 == 0){ echo $i; echo "
“;
}
//$iに1を足す(ifの条件に関係なく$iは足される必要があるためif文の外で$iを更新する。)
$i++;
}
“`

元記事を表示

LaravelのupdateOrCreateでUnknown column ‘id’ in ‘where clause’ でエラーが出た

##概要
Laravel5.5を使用していて、UpdateOrCreateという関数を使用した実装を行おうとしたところ
指定していない`id`がNULLになっているとエラーが出てきた。
[Laravel公式ドキュメント](https://readouble.com/laravel/5.5/ja/eloquent.html)

“`
$flight = App\Flight::updateOrCreate(
[‘departure’ => ‘Oakland’, ‘destination’ => ‘San Diego’],
[‘price’ => 99]
);
“`

###結果
`id`以外のプライマリキーを使用する場合、
モデルに`primaryKey = ‘id以外’ `を記入しないと`id`を使ってSQLが叩かれるみたい

元記事を表示

Laravel hasManyThrough メモ

#決済情報テーブル

|id | user_id|決済情報2 |
|—|—|—|
|1 |1 |hoge1 |
|2 |2 |hoge2 |

#中間テーブル(購入した商品と購入者)
|id |アイテム_id | 決済情報_id |
|—|—|—|
|1 |1 |1 |
|2 |1 |2 |
|3 |2 |2 |

#商品テーブル

|id | 商品名 |商品説明 |
|—|—|—|
|1 |huga1 |huga1 |
|2 |huga2 |huga2 |

“`
class Settlement extends Model
{
  
    public function getItems()
    {
        return $this->hasManyThrough(商品::class, 中間::class, ‘決済情報_id’, ‘id’, null, ‘商品_id’);
    }
}

“`

“`
Settlement::with(‘getItems’)->where(‘use

元記事を表示

OTHERカテゴリの最新記事