PHP関連のことを調べてみた

PHP関連のことを調べてみた

PHP入門 – 他言語からPHP触った時用

# 概要
他言語からPHPを触った時に戸惑うPHP独特の変数宣言や代入、処理についてまとめ

# 宣言関連
## 変数の宣言, 代入, 定数
“`
// 宣言
$a;

// 代入
$a = b;

// 定数
const $a = b;
“`
※ 変数名はアルファベット, もしくわアンダーバーから始まる必要がある

文字列は`’`か`”`で囲う

## boolean
“`
$bool = true
$bool = FALSE
“`
※ 小文字, 大文字は区別しない

## 配列, 連想配列
### 配列
“`
$array = [
‘要素1’,
‘要素2’,
‘要素3’,
‘要素4’
];
“`

### 連想配列
“`
$array = [
“id” => 1,
“name” => “日本 太郎”
];

// keyでの要素呼び出し
$array[“id”]
“`

## オブジェクト
“`
class object {
public $id = 1;
public $name = “日本太郎”

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~参照可能ファイル編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/535811002aaee3134db3)の記事でファイルのダウンロード方法をまとめました。
今回はFlowにおける静的ファイルなどの参照可能なファイルの扱いについてまとめます。

# 事前知識
今回の記事は以下の記事に関連する内容を扱います。
必須ではないですが、必要に応じてご覧ください。

[【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルアップロード編~](https://qiita.com/nnhkrnk/items/f06f40bf8e1159eff80d)
[【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルダウンロード編~](https://qiita.com/nnhkrnk/items/535811002aaee3134db3)

# Flowにおけるファイル管理
前提として、Flowではファイルを保存する領域が2つ存在します。

|領域|用途|
|–|–|
|Storage|アップロードされたファイルが保存される領域|
|Target|

元記事を表示

スマホでペット用監視カメラを作ってみた

# はじめに
スマートフォンを使った監視カメラシステムを作ってみました
作ろうと思い立ったきっかけですが、昨年ワンちゃんを一頭飼い始めて
最近もう一頭増えたのと、その子が保護犬ということでなかなか目が離せないということもあり、スマホを使って外出先から自宅のワンちゃんの様子を確認出来る仕組みを作ってみようと思ったのがきっかけです

| 1頭目 | 2頭目 |
|:-:|:-:|
| 01_choco.jpg | 02_coronet.jpg

元記事を表示

Laravelのリレーションがやっとわかったので備忘録(え、いまさら?)

# 今回作成するモデル
“`mermaid
erDiagram

User{
id int
username string
email string
password byte
}

Profile {
id int
user_id int
name string
description string
}

User||–o|Profile:””

“`

# Modelの書き方

“`(親側)User.php

元記事を表示

ルーティングを間違えるとコントローラにはアクセスできない

## はじめに
Laravelでテストコードを実装していた時、ルーティングを間違えたせいでコントローラにアクセスできず、しばらくブロックされていました。

基本的な所ではありますが、自戒も込めて対応法をまとめておきます。

## 環境
Laravel 9.52.16

## 問題
* 問題となったテストコード

“`php: SalesOrdersControllerTest.php(一部略)
public function test_sales_destroy(): void
{
// テスト用のユーザを作成
$user = User::factory()->create();

$formData = [
‘category_id’ => 1,
// 以下略
];

// フォームデータを保存
$response = $this->actingAs($user)->post(‘/my/sales/store’, $formDat

元記事を表示

値をPOSTされた時のみ処理を行う PHP

## はじめに
値を受け取った時のみ処理を行うコードです、POSTのみに限りませんが備忘録として置いておきます。

## 使ってみる
post.phpとFunc.phpがあります。
func.phpはPost.phpから送られたmessageをテキストに追加していきます。
“`php
//post.php



“`
“`php
//func.php

$message = filter_input(INPUT_POST, ‘message’);
$message = $message ?? ‘値が空です’;

$fp = fopen(‘messages.txt’, ‘a’);
fwrite($fp, $message . “\n”);
fclose($fp);
“`
このコードだと手入力でlocalhost:8080/Func.phpとすると「値が空です」とテ

元記事を表示

良いコード悪いコードで学ぶ設計入門を読んで(その①)

# 前置き
今年の目標に小規模~中規模のリファクタリングができるようになることを設定しました。まずコードの良し悪しの判断基準が明確に分からなかったので名著である『良いコード悪いコードで学ぶ設計入門』の内容を纏めることで今後のphp,Laravelのアプリケーションの開発に生かしたいと思いました。

## 1章 悪しき構造の弊害を知覚する
– 技術駆動命名や連番命名をしない

“`sample.php
class MemoryStateManager{
void changeIntValue01(int $changeValue){
$intValue01-=$changeValue;
//以下略
}
}
“`
MemoryStateManagerみたいな関数の技術駆動命名結構してたかもしれない
他者から見ると意図がわかりにくいのか、知らなかった。注意する。
– 条件文の巨大なネスト

ネストが深くなると仕様変更などに時間がかかるという話

– 様々な悪魔を招きやすいデータクラス

“`DataClass.php
public cla

元記事を表示

網羅率とテストスイートの質との関係

## 概要
網羅率が低いテストスイートの質が悪いことを示せても、網羅率が高いテストスイートの質がいいことは証明できない

## 定義
> **網羅率(coverage)とは、テストスイートに含まれているテストケースが実行するプロダクションコードの割合のことです。**
>
> _単体テストの考え方/使い方 p11_

## コード網羅率(テスト網羅率)の落とし穴
“`math
コード網羅率 = \frac{実行されたコードの行数}{総行数}
“`

下記のテストはコード網羅率100%になるが、実際にはテストされていない振る舞いがある($inputの長さが5以上の場合)

“`php
function isStringLong(string $input): bool
{
return strlen($input) > 5;
}

function test入力文字の長さが5以下の場合falseが返る()
{
$result = $this.isStringLong(3);
}
“`

## 分岐網羅率
“`math
分岐網羅率 = \frac{経由された経路の数

元記事を表示

【Laravel10】変数展開の際に気をつけること(エラー対処:syntax error, unexpected token)

Laravelのビューファイル(拡張子「.blade.php」)にif文を記述したところ、構文エラーが発生するなどの問題が発生してしまいました。
初歩的な内容ではありますが、対処方法の備忘録として作成した記事です。
# 問題
* 「syntax error, unexpected token “<"」というエラーが発生。 * 記述した関数がそのままブラウザに表示される。 # エラー発生時のコード ※$items:itemsテーブルから取得したデータ。 ```php:resources\views\item\example.blade.php {{-- 省略 --}} @foreach ($items as $item)

{{ $item->id }}
元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルダウンロード編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/f06f40bf8e1159eff80d)の記事でファイルのアップロードについてをまとめました。
今回はFlowを用いてファイルダウンロードの実装方法についてまとめます。

# 事前知識
この記事はFlowにおける基本的なDB操作ができることを前提に記載しています。
以下の記事を読んでから読むことをおすすめします。
[【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~](https://qiita.com/nnhkrnk/items/2b9f647d6130a098345f)
[【PHP】マイナーフレームワーク「Flow」を試してみる~DB接続&データ登録編~](https://qiita.com/nnhkrnk/items/739ac12036c858525e23)

また、この記事は以下の記事の続きです。
[【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルアップロード編~](https://qiita.com/nnhkrnk/items/f06f40

元記事を表示

【バックエンド】駆け出しエンジニアが目指すジュニアレベルのエンジニアとは【2024年版】

# はじめに
こんにちは。
普段はフロントエンドの開発をメインでやっておりますmamiと申します。
最近バックエンドの方の勉強や、少しずつですがDB設計やAPI作成などの業務もやらせてもらえるようになったので、自分のエンジニアとしてのレベル感や、この先目指すべき道筋を明確にしたいな〜という思いでこの記事を書いております。

これは自分のための記事であると同時に、同じように駆け出し中のエンジニアさんや、ミドル層を目指す手前のエンジニアさんにも刺さる内容になっているかと思います。
今、**自分がどのようにキャリアアップしていく**べきなのか、どのような道筋で**スキルを磨いていけばいい**のか。そんなふうに悩んでいる方は是非読んでみてください。

※内容はバックエンドエンジニアが対象になりますが、フロントエンドの方もなにか通じるものがある…かもしれません。
ちなみにですがフロントエンドの方の記事は下記で執筆していますので、興味のある方はぜひ読んでみてください。

https://qiita.com/mamimami0709/items/c9657367a8e7dfdca070

#

元記事を表示

PHPでのSQL文の実行時の注意 – 備忘録(´・ω・`)

# 何この記事
その名の通り備忘録。
みんなが知っているSQLインジェクション対策で同じように間違えないように、、、
# 短い本編
初心者と経験者と分けて説明します。
今回使うテーブルにはサザエさん一家を使います。
テーブル名:Family
| ID | Name |
|:-|:-|
|1|フグ田サザエ|
|2|磯野波平|
|3|磯野フネ|
|4|フグ田マスオ|
|5|磯野カツオ|
|6|フグ田タラオ|
|7|磯野ワカメ|
|8|タマ|

### 初心者
PHP触りたてほやほやの人が書きそうな文
“`PHP
$ID = 1;
$sql = “SELECT*FROM `Family` WHERE ID = ‘” . $ID . “‘;”;
$stmt = $dbh->query($sql);
“`
おや?SQL文が簡単そうですね。では、実行してみましょう。
#### 結果
| ID | Name |
|:-|:-|
|1|フグ田サザエ|

IDが1の人がヒットしました。さて、皆さんはお気づきかもしれませんが、この文では攻撃が簡単にされてしまうんです。
では、攻撃をしてみましょうw
`

元記事を表示

LaraveでCSSをresourcesディレクトリ内に配置する

# はじめに
今まで’***public/css***’ ディレクトリ内に配置していたが、’***resources/css***’ ディレクトリ内に配置する方法をまとめる

# 開発環境
Laravel 8
Node.js

# ‘***public***’ と ‘***resources***’ ディレクトリの違いについて

| ディレクトリ名 | 説明 |
|:-|:-|
| public | 外部から直接アクセス可能なファイルを格納するための場所 |
| resources | アプリケーションのリソースやソースコードを格納するための場所
Laravel Mixなどのビルドツールを使用して最終的な成果物が ‘***public***’ ディレクトリに配置される |

# Laravel Mixの設定
‘***webpack.mix.js***’ ファイルを編集し、どのCSSファイルをコンパイルし、どのJavaScriptファイルをバンドルするかを指定する
“`JavaScript:webpack.mix.js
mix.js(‘resources/js/app.js’,’

元記事を表示

備忘録:メール送信機能の実装(Laravel8)

## はじめに
備忘録として、メール送信機能の実装方法についてまとめた

## 開発環境
Laravel 8
Laravel-permission
※宛先判定のため、Laravel-permissionパッケージを導入

## 実装したいこと
ブラウザ上で送信したい本文を入力し、指定する宛先に送信する

## 環境構築
**.env**ファイルにメールサービスの設定を追加する。
“`php:.env
#Gmailを使用する例

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME=”${APP_NAME}”
“`

## Markdown Mailableクラスの作成
*Mailable*クラスを作成
同時に*Markdown*を使用することを指定する
“`ph

元記事を表示

【empty()関数】0がnull扱いになる事にハマった

# きっかけ
ハマったので簡単なコードでまとめる
実際には以下のようなテーブルでプルダウンを作って検索処理を実装した時に起きた
| 有効 | 無効 |
|—-|—-|
|0|1|
# 状況
プルダウンでりんごを選択した時に検索出来ない
“`php


“`
# 原因
empty()関数で0はnull扱いだった
りんごを選択した時、以下の条件式ではfalseになるため検索がかからなかった
“`php
if(!empty($all[“fruit”])){
}
“`
# 解決策
ひとまず以下の条件式で動いたがvalueの値に0を使わないほうがよかったかも
“`php
if($all[“fruit”] !=

元記事を表示

三項演算子で条件分岐させる

## はじめに
「依頼を探す」ページが表示される時は依頼の検索機能が、

そして「提案を探す」ページが表示される時には提案の検索機能が・・・

といったように、表示されるビューによって処理の内容を変えたい時は「三項演算子」を使うのが良いそうです。

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

> 『(expr1) ? (expr2) : (expr3) という式は、式1 が true の場合に 式2 を、 式1 が false の場合に 式3 を値とします。』(PHP公式ドキュメントより)

## 環境
PHP 8.2.7
Laravel 9.52.16

## 問題
* 検索フォームを実装しようとしている
* 提案・依頼の両方を検索できるようにしたい
* つまり、表示するビュー次第でルートを分岐させたい

“`php: commons.search_form.blade.php
{{– 今はまだ依頼の検索しかできないが、

元記事を表示

Laravel10 + Inertia + vue3で動的な多言語機能の実装

# 概要
laravelで動的な言語切り替えを実装しようとした際に情報があまり出ていなかったので備忘録も含めて実装のマニュアルを残そうと思いました

# 必要なものをインストール

### コマンド一覧
**多言語対応初期設定**
バックエンド側
`composer require laravel-lang/common –dev`

`php artisan lang:publish`

vue側
`npm i laravel-vue-i18n`

**対応言語一覧**
https://github.com/drobee/Laravel-lang/tree/master/json

# 実装
### Laravel側
“`php:/app/config/languages.php
‘English’,
‘ja’ => ‘日本語’,
‘vi’ => ‘Tiếng Việt’,
‘zh-CN’ => ‘汉语’,
‘tr’ => ‘Türkçe’,
‘ar’ => ‘اللغة العربية

元記事を表示

PHP 値の送信と受け取りをしてみる+少しcookie

## はじめに
PHPといえば値の入力フォームに入力した値を送信し、別で受け取ります。勉強していることのまとめなので完璧ではありません。参考程度にお願いします。

## 値の送信
“`php
//Post.php

//get.phpに送信
 //messageという名前でテキストを送信

“`
method=”get”はurlの後に値を付与します。
method=”post”はurlから見えません。

## 値の受け取り
値の受信にも色々ありそうですが今回は以下のやり方でやります。多分別は$_GETを使うものです。
“`php
//Get.php

“`
フォームから送信された値の取得にはfilter_inputを使

元記事を表示

PHP 別のファイルの読み込み

## はじめに
クラスや関数など書いた外部ファイルを読み込んで使うことがあります。自分用のまとめなので間違いや自分が完全に理解しているところに関しては省略して書いていることもあります。ご了承お願いします。

## requireかincludeで読み込む
同じフォルダ内にあるclass.phpというファイルを読み込んでいきます。
“`php
require(‘class.php’); //ファイルが読み込めなかったらその場で処理が止まる
include(‘class.php’); //ファイルが読み込まなくても処理が止まらない
“`
以下のような少し違う処理の書き方もあります。
“`php
require_once(‘class.php’); //ファイルを一度だけ読み込む
include_once(‘class.php’); //ファイルを一度だけ読み込む
“`
ぶっちゃけ_onceがどのように活躍するかわかりませんが、覚えておきます。

## 一応少しだけパスの書き方
今度自分が見返すようにサンプルパスを少し書いておきます。
“`php
require(‘class.ph

元記事を表示

PHP オブジェクト クラス

## はじめに
PHPのオブジェクトです。何年か前にpythonで少しやった気がします。自分用のまとめなので間違いや自分が完全に理解しているところに関しては省略して書いていることもあります。ご了承お願いします。

## クラスの定義
クラスはclass クラス名で定義します。
また、クラス名は大文字スタートです、
“`php
class Client{
}
“`

プロパティとメソッド、定数を定義していきます。
“`php
class Client{
public $number;
public $name;
public const VERSION = 1.0;

public function info(){
printf(‘顧客番号->%d、顧客名->%s’ . PHP_EOL, $this->number, $this->name);
}
}
“`
このthisってのがインスタンスのことって考えると覚えやすかったりした気がしてきたりします。
また、以下のように記述することでプロパティの型の指定が可能です。普通の書き

元記事を表示

OTHERカテゴリの最新記事