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

PHP関連のことを調べてみた2022年03月11日
目次

【PHP/継承】クラス内のpublic変数宣言はコンストラクタより先に行われているのだった

PHPのライブラリの継承ラッパーを作っていて認識違いでハマったのでメモ。

# 状況
例えばこんなライブラリがあり。
基本的にはライブラリ内のコードには手を出したくないので、ここには調整は入れませんが、
デフォルトで $hensuu という変数が存在(ここでは宣言のみ)しています。

“`php:Library.php
class Library_sample {

var $hensuu;

public function test(){
//なんやかんや
}

}
“`

で、それを継承するラッパークラスを作りました。

“`php:Hoge.php

class Hoge extends Library_sample{
public $hensuu = true;
public $hensuu2 = true;

public function __construct()
{
parent::__construct();

}

“`

このラッパークラス「Hoge」で変数、$hensuuにtrueをセットしています。
ついでに

元記事を表示

LIKEをbindしようとしたら二度怒られた。

# LIKE検索をPHPからしたい。
bindなんたら~でLIKEを書いたら怒られた。
“`php:おこられた書き方.php
$sql = “select * from table where hoge like %:value% “;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(“:value”, $value, PDO::PARAM_STR);
“`
# え、これも違うのか。
文字列扱いだからクォーテーションがいる!とか思った。
“`php:こりてない書き方.php
$sql = “select * from table where hoge like ‘%:value%’ “;
$stmt = $pdo->prepare($sql);
$stmt->bindValue(“:value”, $value, PDO::PARAM_STR);
“`
# %も変数に入れてください?
すみませんでした。。。
“`php:ごめんね.php
$sql = “select * from table where hoge like :v

元記事を表示

Laravel AmazonSNSでSMS送信

こちらの記事を参考にしています。AWSの設定は省きます。
https://codeeee.net/posts/laravel-amazon-sns-send-sms

AWSのパッケージをcomposerでインストール。
“`
COMPOSER_MEMORY_LIMIT=-1 composer require aws/aws-sdk-php-laravel
“`

プロバイダ追加
“`php:config/app.php
‘providers’ => [
//…
Aws\Laravel\AwsServiceProvider::class,
],
“`

コマンドで設定ファイルを作成
“`
php artisan vendor:publish –provider=”Aws\Laravel\AwsServiceProvider”
“`

以下にファイル設定が作成される
“`php:config/aws.php
‘credentials’ => [
‘key’ => env(‘AWS_ACCESS_KEY_ID’, ”),

元記事を表示

Laravel 共通関数作成

コントローラー等で使いたい共通関数の作成方法。
app/ 直下にフォルダを作成しその中にファイルを作成。今回はLibraryフォルダを作成した。

“`php:app/Library/Hoge.php
App\Library\Hoge::class,
“`

コントローラーから呼び出し
“`php:app/Http/Controllers/UserController.php
\Hoge::huga();
“`

元記事を表示

PHP 今更ながらオブジェクト指向を自分自身に向けて解説してみた ~基本編~

# 概要

– かなり前に下記のような記事を記載したが、まとめただけでちゃんと理解できていなかった気がするのでもう一度記載する。
– [PHP Laravel オブジェクト指向 用語集](https://qiita.com/miriwo/items/974adcee45f699553cd4)

# 前提

– 下記サービスを用いて検証を行った。
– [https://paiza.io/](https://paiza.io/)

# 内容

### クラス

– オブジェクト指向の説明でよく「設計図」と言われるもの。
– 設計図と言われるけどそんなにたいしたものではなく、中に関数とか変数とかを入れておいて使い回せるようにしたものである。
– 基本的に一個の.phpファイルに一個のクラスを記載する。
– .phpファイルのファイル名はクラス名と一致させる。
– わかりにくくなるため推奨はされないが一個の.phpのファイルに複数のクラスを定義することもできる。
– 下記のように定義する。(クラス名はパスカルケースで記載する)

“`php

元記事を表示

laravel学んで2か月で自サービスを開発した話 Part10

qiitaの草を増やした結果、githubの草が除草されました私です

胡蝶蘭を捨てるくらいならワイが欲しいので、サービス開発する編
公式ドキュメントの言う通り、パッケージをインストールされたら、Inertia.jsが導入されて???になった編
マルチログインを作ってみた編
デザインをtailwindcssに丸投げする編
Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件

LaravelでAPI作成のした際にルーティングでroutes/api.phpに記載すると /api/〜になってしまう。

/api部分を無くすためには以下を削除すればいい。

“`php:app/Providers/RouteServiceProvider.php
Route::prefix(‘api’) //prefixを削除
->middleware(‘api’)
->namespace($this->namespace)
->group(base_path(‘routes/api.php’));
“`

これと同じ挙動でweb.phpなどでも活用できる
“`php:
Route::prefix(‘user’)->group(function () {
Route::post(‘/’, ‘App\Http\Controllers\UserController@index’);
Route::post(‘create’, ‘App\Http\Controllers\UserController@create

元記事を表示

Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスできない(nginx / Docker / Zend Framework 3)

諸事情で Zend Framework を初めて学習中の西暦2022年。Zend Framework公式ドキュメントのtutorialを元にハンズオン学習している。

## 1. やりたいことを確認する。

– Zend FrameworkのWelcomeページは http://localhost/ もしくは http://localhost/application/index にアクセスするとWelcomeページが表示されるようにルーティングを設定できるようになっており、そのようなに表示されるようにしたい。
– 開発環境の構築にDockerを利用しており、下記の構成にしている。(Zend Framework の公式ドキュメントでは、Webサーバは Apache が使用されており、 nginx についての記述はない。)

| Dockerコンテナ | Dockerイメージ | 備考 |
| — | — | — |
| web | nginx:1.18.0-alpine | |
| app | php:7.4.19-fpm-

元記事を表示

【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき

### エラー状況
:::note alert
Laravelでページネーション機能を導入したが
下記画像のように、上手くページ番号が表示されない。
:::

![スクリーンショット 2022-03-09 21.47.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525372/259b6878-c445-e433-ae24-91168090b89d.png)

ページネーション導入はこちらの記事を参考しました!

https://leben.mobi/blog/laravel8_pagination/php/

https://biz.addisteria.com/laravel8_pagination/

### 何が原因だったか

“`CSS“`が反映されていないことが原因です。
では、CSSを見てみました。

![スクリーンショット 2022-03-09 21.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

macのPHPのバージョンを8.1にアップデートする

# PHPを8.1にバージョンアップしたい
先月Laravel9がリリースされ、PHPのバージョンが8.0以上必要になりました。
ついでに8.1からはEnum型なども導入され、いろいろ変化してるみたいですね。
macOSにはもともとphpが入っていますが、手元の環境では7系だったのでHomebrewを用いてインストールしたいと思います。

## バージョン確認

デフォルトではv7.3が入っていました。
“`sh
% php -v
WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.24-(to be removed in future macOS) (cli) (built: Jun 17 2021 21:41:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine

元記事を表示

ポートフォリオとして、PDCA管理のアプリを作成しました。

# はじめに
### 記事の目的
ポートフォリオとして作成したWebアプリケーションの紹介記事です。

注:PDCAとは

https://cicou.under.jp/myPDCA/login.php

# アプリの概要

# 機能
### 登録
### 一覧
### 編集
### 削除
# 使用技術
### バックエンド
– PHP
### フロントエンド
– HTML
– CSS
– bootstrap
### データベース
– MySQL
### デプロイ

# 工夫した点
### 見やすさ
# 最後に

https://cicou.under.jp/myPDCA/login.php

元記事を表示

ADRパターン

# ADRの概要
– Action-Domain-Responder
– ソフトウェアアーキテクチャパターンの1つ
– MVCの改良版

# MVCと違うところ
1つのアクションに対して、そのリクエストからレスポンスを定義する。

## MVCの場合
例えばMVC実装だと、1つのコントローラーに
– index
– insert
– update
– delete

などアクションを複数定義する。

## ADRの場合
1クラス1アクションにより
– シンプルなリクエスト→レスポンスの流れ
– 1クラスの責務が明確

# 構成
## Action
リクエストを受け取り、ドメインの処理結果をレスポンダに渡す

## Domain
必要な処理を行い結果を返す
ビジネスロジックはここに含まれる

## Responder
ドメインの処理結果を受け取り、必要な準備を行いレスポンスを返す

# 実装例
PHP/Laravel

## Actionクラス
– Controllerクラスを継承
– コンストラクタでドメインオブジェクトとレスポンダオブジェクトを注入
– レスポンダに渡す処理をinvo

元記事を表示

【PHP】foreach小ネタ

# コード
“`PHP
1, “name” => ‘Tom’],
[“id” => 2, “name” => ‘Fred’],
];
foreach ($data as [“id” => $id, “name” => $name]) {
echo “id: $id, name: $name”.PHP_EOL;
}

“`

# 結果
“`
id: 1, name: Tom
id: 2, name: Fred
“`

元記事を表示

WordPressのAdvancedCustomFieldsにデフォルト値を設定する方法

# 実装

左サイドバー > 外観 > テーマエディター をクリック後
右サイドバー > テーマファイル > テーマのための関数 (functions.php) をクリック

ファイルの末尾に以下の内容を追記して保存する

“`php
/**
* カスタムフィールドのデフォルト値を設定する
*/
function acf_my_custom_field_name_callback($field)
{
$field[‘default_value’] = “★デフォルト値をここに入力★”
return $field;
}

// デフォルト値設定を適用する
add_filter(‘acf/load_field/name=my_custom_field_name’, acf_my_custom_field_name_callback);
“`

`my_custom_field_name`の部分にはご自身で作ったカスタムフィールド名を入れてください。

`close_date`ならば、
`add_filter(‘acf/load_field/name=close_da

元記事を表示

WordPressでACFデイトピッカーのデフォルト値に現在日付の一カ月後を設定する

実装しといて何ですが、ボツになったので供養のため残します。
デフォルト値の設定ってこんなめんどくさいことしなきゃいけないんですかWordPressって。

左サイドバー > 外観 > テーマエディター をクリック後
右サイドバー > テーマファイル > テーマのための関数 (functions.php) をクリック

ファイルの末尾に以下の内容を追記して保存する

“`php
/**
* 現在日付の一カ月後を文字列で取得
*/
function show_next_month_from_now()
{
$dt = new DateTime();
$dt->modify(“+1 month”);
$date = $dt->format(“Y-m-d”);
return $date;
}

/**
* カスタムフィールドのデフォルト値を設定する
*/
function acf_my_custom_field_name_callback($field)
{
$field[‘default_value’] = show_next_month_f

元記事を表示

PHP8のコンテナでdocker stopしてるのにSIGTERMが送られていない事象について

## 概要

PHP8のDockerコンテナに対して
docker stop

docker-compose stop
をしてもSIGTERMが送られず
phpスクリプトに記載のシグナル制御がうまく動かなかった。

## 原因

利用したDocker ImageにてSTOPSIGNALによりデフォルトのSIGTERMから別のシグナルに変更されていたため。

## 詳細

### Docker Image

https://hub.docker.com/r/phpdockerio/php80-fpm

### docker-compose

“`yml:docker-compose.yml
version: ‘2.0’
services:
app:
container_name: php8
image: phpdockerio/php80-fpm
volumes:
– ./:/var/www/html/
command: php /var/www/html/test.php
“`

### test.php

“`php:test.

元記事を表示

12: 値による代入と参照による代入

値による代入と参照による代入

これまで、変数とは「値を格納するための入れ物」と説明してきたが、少しだけ嘘が混ざっている。笑

値を格納するのは、厳密にはコンピューター上に用意されたメモリの役割である。

メモリには、それぞれの場所を表す番号(アドレス)が振られている。

しかし、コードに意味のない番号を記述するのでは、見た目もわかりにくいし、タイプミスの原因にもなる。

そこでアドレスに対して、人間が分かりやすいように名前をつけておく。
それが変数の正体である。

変数とは、値の格納先(アドレス)に対して付けられた名札と言っても良い。

|メモリ||
|:-:|:-:|
|アドレス|   値   |
|0||
|10|1 `(変数$xはメモリ上のアドレス10に格納)→ $x = 1;`|
|20||
|30|5 `(変数$yはメモリ上のアドレス30に格納)→ $y = 5;`|
|40||
|50||

アドレス10から値を取得↓

“`
print $x; →

元記事を表示

laravel学んで2か月で自サービスを開発した話 Part9

今までの開発記録はこちらへ
胡蝶蘭を捨てるくらいならワイが欲しいので、サービス開発する編
公式ドキュメントの言う通り、パッケージをインストールされたら、Inertia.jsが導入されて???になった編
マルチログインを作ってみた編
デザインをtailwindcssに丸投げする編
デザイナーに怒ら

元記事を表示

composerがウクライナを応援しているのを見つけてみた #StandWithUkraine

ふとcomposer updateしてみたら違和感が・・・。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250158/0433f512-947c-0875-9cb2-33addc96397e.png)

#StandWith Ukraine
「ウクライナと共に立ち上げれ」的なメッセージが!!

どうやら、こちらのIssueでメッセージが表示されるようになったようです。
https://github.com/composer/composer/issues/10582

追従するプロダクト出てきそうですね。

# 追記

コミットを見てみたら意外と賛否両論
https://github.com/composer/packagist/commit/86244a3695fcaaac9c5ba4257a4314eae1c6d981#/

気軽に手を出してはいけなそうです。

元記事を表示

直前のリクエストURLからクエリパラメータを抽出

### リクエストクラスのquery()メソッドと同様の結果にしたい
“`
use Illuminate\Http\Request;
$request->query()
“`

array:1 [▼

“email” => “desc”
]

# 直前のリクエストURLからクエリパラメータを抽出
`parse_url(url()->previous())`
laravelヘルパのurl()から直前リクエストのurlを取得後にphpのparse_url関数で以下の形で取得できる
array:1 [▼
“scheme” => “http”
“host” => “http://localhost”
“path” => “/sort/index”
“query” => “email=desc”
]
ここから必要なqueryの値を取得して無理やり「=」で区切り、配列にする
その配列の最初をkeyにして最後をvalueにすることで、query()メソッドと同様にした
“`
$query = exp

元記事を表示

OTHERカテゴリの最新記事