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

PHP関連のことを調べてみた2020年08月30日
目次

CodeIgniter3 から Laravel へ。文化の異なるフレームワークへ飛び込む上で,ハードルになりそうなパッケージ管理システムの概要を解説

# 概要

今回は,より高度な(実用的な)仕様の例題を設定し,CodeIgniter と Laravel のコードを対比させていきたいと思います。

具体的には,CSS と JS を組み込んだページを作成したいと思いますが,具体的なコードの紹介は次回の記事にゆだね,今回は,もっと基本となる**「パッケージ管理システム」**について触れます。

あまり一気に難しくならないよう,極力配慮したいと思いますが,前回よりは,ハードルがぐーんと高くなり,おじさんの言語化能力で,どこまで的確に表現できるか,冷や汗をかきそうです(プレッシャーの重圧感)。

マサカリ歓迎案件です(いろいろ教えてください)。

# Laravel で登場する,2つのパッケージ管理システム

どのタイミングで話すべきか迷ったのですが,いずれ書かねばならないことなので,今のタイミングにします。

「軽量であること」を強みとする CodeIgniter は,フレームワークと言うより,フォルダ構造を決めただけの,ファイルの集合体に近いですね(そんな言い方をしてしまうと,世の中のすべてのフレームワークが,「ファイルの集合体」と言え

元記事を表示

[PHP基礎体力向上]競プロ(AOJ-ICPC)の基礎問題をPHPで解いていこう!

# この記事の対象読者
– paizaでランクアップを目指す(Aランクくらいまで)の未経験/駆け出しエンジニア
– ドットインストールや入門書籍でPHPを学んだが、まだ”手に馴染んでいない”初学者

# この記事を書いた目的

書籍やドットインストール等のオンライン学習教材でプログラミング言語を学んだ初学者がいきなりWebサイトを作るのは中々ハードルが高いです。

そういった初学者にオススメしたいのが簡単なプログラミング問題を解いて練習することです。
この練習を通して「サービスの企画に力を分散させることなく、純粋にコーディング能力を鍛える」ことが出来ます。

これは後々Webサービスを開発する上でも絶対に役立つ基礎力になるはずです。

これは未経験からソフトウェア開発職にキャリアチェンジしたい方にもオススメのやり方です。
例えば[paiza](https://paiza.jp/)というコーディングテストを受けて就職活動が出来るサービスではAランクくらいまで取れればかなりの数の企業に”エントリーシートなしで”面接することが出来ます。またpaiza以外の媒体で面接した企業の方にも「pa

元記事を表示

WordPressにプラグインなしで目次を自動生成する(style、スクロールアニメーション付き)

WordPressの投稿エリアにプラグインなしで実装できる目次機能をつくっていきたいと思います。

##今回作るものの要件

– h2、h3を読み取って自動的に目次を生成する
– h3は小見出しとして、h2にぶら下がるように表示する
– クリックしたらスクロールするアニメーションを付ける

##目次を自動生成するPHPスクリプト
WordPressでご使用中のテーマファイル内のfunctions.phpに以下をコピペします。
コードがごちゃごちゃするのが嫌なのでDOMDocumentを使ってHTMLを構築しています。

“`php:functions.php
class PHPDOM
{
public function __construct()
{
$this->doc = new DOMDocument(‘1.0’, ‘UTF-8’);
}

public function setNode(string $tagName, ?string $className = null, ?string $text = null): objec

元記事を表示

mac編 MAMPにcakephpをインストールする方法

#手順公開(備忘録)

##1.macにMAMPをインストール

##2.MAMPのphpにPATHを通す(ターミナルでmac内のphpからMAMPのphpにPATH)

ターミナルで

“`
macbook:~ user$ which php
“`

を実行すると、現在の状態がわかるので(/usr/bin/php)と表示されるはず。
調べるとこのphpは元々macに入っているphpだそうでこのままじゃダメだそうです。

この場合MAMPのphpにPATHが通っていないので、
ターミナルで

“`
macbook:~ user$ .bash_profile
“`
を実行してvim操作にうつる。

##3.VimでMAMPのphpにPATHをとおす

Vimの画面でインサートモードに切り替えて

“`
export PATH=/Applications/MAMP/bin/php/php?.?.?/bin:$PATH
“`
を実行。
/php?.?.?/の部分はphpバージョンを選ぶ。
インサートモードを終了して保存してVim画面も終了。
※Vimのコマンド操作は事前に見とく。

元記事を表示

PHPにおけるアロー演算子

#プログラミングの勉強日記
2020年8月29日
アロー演算子(`->`の記号)の使い方をまとめる。

#アロー演算子とは
 上でも述べたが、`->`の記号のことをアロー演算子という。アロー演算子は左辺にクラスのインスタンスを、右辺に左辺のクラスが持つプロパティやメソッドを指定してプロパティへのアクセス・メソッドの呼び出しをする。

#書き方
 アロー演算子の使用例は以下のようになる。

“`php
// インスタンスが持つプロパティであるプロパティ名にアクセス
$instance->プロパティ;
// インスタンスが持つメソッドであるメソッドの呼び出し
$instance->メソッド();
“`

 具体的に以下の例では、「sports」というクラスの中にある「$basketball」という変数にアクセスして値を取り出す。

“`php
class Sports {
$basketball = “バスケ”
$baseball = “野球”
$soccer = “サッカー”
}
fruit->$basketball //野球
“`

#DataTimeクラスを用いて

元記事を表示

Laravel 7系のAuth認証のルーティングをカスタマイズする

#§1. はじめに
Laravelでログイン機能を簡単に実装できるAuthファサードですが、その中身をいじるとなると一気にハードルが上がります。

そしてLaravelのバージョンによってAuth本体のディレクトリの階層構造が異なるという難しさもあります。
調べていてもLaravel5系か6系の情報がほとんどで、7系だと適用できないんですよね。
フレームワークではよくあることかもしれませんが。。

ですので今回はLaravel7系において、Authのルーティングをカスタマイズした時の情報をシェアしたいと思います。
Laravelのバージョンは7.25.0を使用しています。

#§2. やること
今回の記事のスコープは以下の2点です。
 (1) ログインした時のリダイレクト先をカスタマイズする
 (2) Login画面のURLをカスタマイズする

前者はコントローラ周りの修正のみで容易ですが、後者はAuthの仕組みを理解しながらVenderディレクトリの深いところをといじるので少し難解です。
ですので初学者の方は(1)までに留めたほうが良いかもしれません。

では前者から順番に

元記事を表示

データベースフレームワークMedooの書き方 備忘録

たまたまMedooを使う機会があったので、備忘録として書き方を残しておきます。

Medooとは

PHPのデータベースフレームワークです。
(公式サイトはこちら

構造

私が使った内容がこちらです。配置する順番は以下になります。

“`sample.php

select(
“Account”,
[
“[><]Shop" => [“Shop” => “id”],
“[><]Product" => [“Product” => “id”]
],
[
“Account.Id”,
“Account.Name”,
“Account.Tel”,
“Shop.Id(Shop_id)”
“Shop.Name(Shop_Name)”,
“Product.Name(Product_Name)”
],
[
“AND” =>
[
“Accou

元記事を表示

Humhubのカスタムモジュールの作り方(公式ページのとある解釈)(1)

#はじめに
ふと見回してみたが、日本語でのhumhub運用記事はやや見かけるもののの、モジュール開発の情報は少ないようだと気づいた。また、業務でhumhubを運用している仲間内で、技術の情報を記録・情報発信してはどうかと意見がでた。そこで、自分の作業の備忘録、技術継承の意味もかねて記録を作り、情報を発信しておこうと思った。

この文書は、必要最低限の情報を記載したもの。詳しくは、公式ページの”最新”の情報ドキュメントを頼ってほしい。公式のサイトは、予告も更新履歴も示さずにいきなり書き換わるので要注意だ。なお、この文章のところどころに公式に対する棘が感じられるかもしれないが、棘を生やしたくもなるような公式ドキュメントであるためだということに読者の共感が得られるのではないかと、昭和のおじさんは思うのだ。平成生まれの略語感覚の若者の発想についていけない僻みであろう。許してほしい。

https://docs.humhub.org/docs/develop/modules

以下、心を広く持って読んでほしい。なぜなら、公式の情報でわからない部分について経験から作成した駄文注釈満載だからだ。間

元記事を表示

【PHP】str_repeatで同じ文字列を繰り返す

### 環境
・ホストOS: Windows10 Home
・ゲストOS: WSL Ubuntu20.04
・PHP7.4
・Laravel FrameWork 7.17.2

## 関数概要

**str_repeat(string, int)**とすると、stringがint個連結された文字列を返す。

使用例は以下の通り

“`php

echo str_repeat(‘にゃーん’, 3);
//実行結果
にゃーんにゃーんにゃーん
“`

この関数がどんな時に使えるかというと、**境界値テストで文字数の多いプロパティを生成するときに便利** 。

例えば最大文字数を200文字のカラムのバリデーションテストをする場合、手動で入力すると文字数の把握が難しいうえ、毎回入力するのは時間がかかってめんどくさい。テストコードを書くにしても長い文字数を打ち込むことにはかわりない。

こういう問題を解決してくれるのがこの関数
任意の長さの文字列を生成できるので入力値の境界値テストを実施しやすい。

数百文字を直接打ち込む場合と比べてコードの可読性が高いので文字数の過不足によってテストが

元記事を表示

PHP: Smarty の使い方

Ubuntu 20.04 で確認した方法です。

ライブラリーのダウンロード

“`bash
wget https://github.com/smarty-php/smarty/archive/v3.1.35.tar.gz
“`

インストール

>v3.1.35.tar.gz を解凍して、/usr/local/lib 以下に置く

サンプルプログラム

フォルダー構造

“`text
$ tree
.
├── templates
│   └── hello.tpl
├── templates_c
└── test.php
“`

templates_c で書き込めるようにして置く。777 なら確実に書き込める。

“`php:test.php
template_dir = “

元記事を表示

Laravel いいね機能を追加しよう(1)

いいね機能では、いいねテーブルの更新前後で画面遷移は発生させずに、ハートの色といいね数表示を変化させるようにします。

これを実現するため、いいね機能ではクライアント(PCやスマホのブラウザ)からサーバー(Laravel側)へ通信する方法として、formタグではなくJavaScriptを使用します。

今回は、ハートを押された時のサーバーへの通信や、ハートの色やいいね数表示の切り替えといった一連の処理を効率的に開発できるよう、JavaScriptのフレームワークであるVue.jsを使用します。

## 1. Vue.jsをインストールする

Vue.jsをインストールします。

laravelディレクトリのpackage.jsonを以下の通り編集してください。

“`
.
└──laravel
└── package.json
“`

“`php:package.json

// 略
“devDependencies”: {
“axios”: “^0.19”,
“cross-env”: “^5.1”,
“laravel-mix”: “^4.0.

元記事を表示

Laravel で varcher 型を数値としてソートする (column-sortable)

## やりたいこと
MySQL において varchar で定義されたカラムを数値型としてソートしたい。

### どういうこと?
varchar のカラムを order by すると、辞書順にソートが行われる。
例えば `100`, `2`, `99`, `11` というデータがあり、これを昇順に並べるたいとする。
通常は `2`, `11`, `99`, `100` と並ぶことを期待するが、 varchar の場合は `100`, `11`, `2`, `99` という順番になってしまう。
なので、これを期待する順序に並ぶようにしたい。

### 考えうる解決策
1. カラム数値型に変える
2. ゼロパディングする (例: `100`, `002`, `099`, `011`)
3. 対象のデータを数値型にキャストする

本稿では 3 を取り扱う。

## 前提条件等
### 環境
* PHP 7.3.4
* Laravel Framework 5.8.24
* mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64)

### col

元記事を表示

Laravel バリデーションルールsizeで文字数があっているのにバリデーションエラーが出る

# 目的

– バリデーションを実装中にバリデーションルール「size」で指定した文字数と一致しているのにエラーが出てしまう問題をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| 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.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https:

元記事を表示

【PHP/キャスト】型指定を意識する

##はじめに
PHPで実装する時、型指定は意識していますか。
PHPでは変数に文字列を入れればその変数はstring型になり、また整数を入れればint型になります。

>PHP は、変数定義時に明示的な型定義を必要と(または、サポート) しません。ある変数の型は、その変数が使用される文により定義されます。 これは、ある文字列を変数 var に代入した場合には、 var は文字列になることを意味しています。 ある整数値を var に代入した場合には、 その変数は整数になります。
引用:[PHP: 型の相互変換 – Manual](https://www.php.net/manual/ja/language.types.type-juggling.php)

なので変数の型が自動で決まるので意識していないという方もいるかと思います。
しかし予期せぬエラーが起きたり、TypeScriptなど型指定が厳密な言語で実装する時にも困らないようにするためだったりと日頃から型指定は意識しておきたいですね。

##キャストで強制的に型を変更する
PHPで型を変更したい時はキャストすることで可能です。

元記事を表示

「確定する」の命名

# 選択肢

### commit

データベース用語でコミット(=確定する)という用語があります。
個人的には本命馬。
ただ、データベースと関係ない箇所で使うと「commit?」ってなって、単に「遂行する」の意味と勘違いされる可能性もあります。

### confirm

良さそうですが、「確認する」という意味も強そうです。
「相手に聞くことで」確定させるというイメージがあります。

### fix

エンジニア的には「微修正する」の意味が強そうです。

### establish

なんか建ててないですか?

### decide

なんかキメてないですか?

### determine

Google検索で真っ先にコレが出たけど、マですか?

# 試しに書いてみた

“`PHP
// ユーザが登録処理を確定させる

$user->commitRegistration()

$user->confirmRegistration()

$user->fixRegistration()

$user->establishRegistration()

$user->decideReg

元記事を表示

JavaScriptとPHPの記載方法の違い

### 変数
| 処理 | JavaScript | PHP |
|:–|:–|:–|
|変数宣言| let name 
const name | $name |
|変数埋め込み|\`私は${name}です\` |”私は{$name}です”|
|変数連結|name + “です”.|$name.”です”|

### 配列
| 処理 | JavaScript | PHP |
|:–|:–|:–|
|配列の末尾に追加 | names.push(“太郎”); | $names[] = “太郎”; |
|配列の長さ取得| array.length;|count($array);|
|配列の作り方|const array = [“apple”, “orange”, “banana”];|$array = array(“apple”,”orange”,”banaan”);|
|連想配列(js:オブジェクト)の作り方|const obj = {name: “太郎”, gender: “男性}; |$obj = array(“name” => “太郎”,”gend

元記事を表示

PHPで超簡易ルーティング

まずはじめに

「こんなんルーティングっていうのか?(´・_・`)」

というツッコミは、甘んじて受けます。**てか、推奨します。**

「推奨するの?(´・_・`)」

## やりたいこと

例えば

**/pages/index.php?page=1**

みたいなURLではなく

**/pages/1/**

で処理をしたい。ただそれだけ。
それだけですってば(´・_・`)

## .htaccess

プログラム単体でできるハナシではなく、サーバ側で、変なURLを受け付けても404にせずにindex.phpで処理をするように制御する必要があります。
そのために、.htaccessの設定をします。

“`

RewriteEngine On
RewriteBase /pages/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /pages/ind

元記事を表示

【CakePHP】$this->request->query()はちゃんとURLデコードされている

## 検証した環境
・CakePHP2
・CakePHP3.8

## なぜこの記事を書いたか

タイトルの通りです。
GETパラメーターを渡し、コントローラーで`$this->request->query()`で受け取ること、良くあると思います。
その際、GETパラメーターにURLエンコードされた値を渡すことがあります。
そしてそのGETパラメーターを、コントローラーで`$this->request->query()`で取得すると、いつの間にかURLデコードされた値になっています。

“`:例
// ユーザーIDをカンマ区切りで複数渡したい時
// 1234,5678,9012 をURLエンコードしてGETパラメーターで渡す。
https://sample.com/users/index?user_id=1234%2C5678%2C9012

// コントローラーでuser_idを取得
$user_id = $this->request->query(‘user_id’);

// 取得したuser_idの中身は、「1234,5678,9012」になっている。
 (URLデコードさ

元記事を表示

「CodeIgniter4 じゃなくて Laravel に行きたい」と,ひそかにアップグレードを企てている CodeIgniter 開発者に伝えたい,Laravel の魅力

# 概要

CodeIgniter を使った業務は,それなりにこなしてきたものの,**職場での採用フレームワークが CodeIgniter だから,なかなか Laravel へ触れる機会がない**というエンジニアを意識して,Laravel の世界を紹介するような記事を書こうと思いました。

おじさん自身,Laravel は入門一ヶ月未満の立場ですが,**初学者だからこそ,上級者には書けない視点で,平易に記述できることもあるだろう**というポイントに意味を見出し,キーボードに向かっています。

まずは,超絶簡単な例題を使って,CodeIgniter と Laravel のソースを対比させようと思います。

連載は,あるかも知れないし,ないかも知れないという,無責任企画シリーズです。

そして,マサカリ歓迎案件です(いろいろ教えてください)。

# CodeIgniter で書いたソース

まずは,これ以上ないほど,シンプル(だけど,ちゃんとした MVC 構造)なコードを書きます。

`localhost` でアクセスしたら,”Hello CodeIgniter!” と表示するだけのページ

元記事を表示

何なのだ『例外』とは?どう使えばいいのだ!?

# 例外処理 使ってますか?

プログラミングの解説で登場する例外処理。
何となく仕組みは理解はできたものの、実際に使うとなると難しいですよね。

**使わなくても動くし!**

**try-catchとかExceptionとか書くのが面倒!**

私も最初は使いどころが分からなかったのですが、
他のコードを見て勉強しているうちに「例外処理を使えばもっと良いコードが書けそう」というのが分かってきました。

そこでどのような時に例外処理を使うのか、まとめてみます。

※ PHP言語を使って説明しますが例外処理の基本はだいたい同じだと思います。

# お釣りを計算する関数

商品価格`$price`と支払額`$payment`を渡してお釣りを計算する関数を実装します。
ただし、商品価格に対して支払額が少ないケースもありえます。

“`php
function calChange(int $price, int $payment): int
{
return $payment – $price;
}

$change1 = calChange(900, 1000); // 100

元記事を表示

OTHERカテゴリの最新記事