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

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

【PHP】あなたのオブジェクト指向を深める – インスタンスを生成

# インスタンスを生成しよう
`Person`からインスタンスを生成してみましょう。PHPの変数は、数値や文字列などの変数、複数の変数をまとめた配列、オブジェクトの3種類に大別できます。クラスから生成したインスタンスは、オブジェクト型の変数に代入して使います。このインスタンスを変数に代入することが、オブジェクト指向の理解を難しくしているもう一つの要因だと思います。

| 変数のタイプ | 使い方 |
| —- | —- |
| 数値、文字列 | `$a=1;` `$a=’suzuki’;` |
| 配列、連想配列 |`$a=[1, 2, 3];` `$a=[‘name’ => ‘suzuki’];` |
| オブジェクト | `$a = new Class();` |

`Person`のインスタンス生成と、プロパティ`name` `age`を取得するソースコードです。インスタンスは`new`で生成します。2つのインスタンスを生成して、`$person_a` `$ person_b`に代入しました。

“`php:sample3-1.php

元記事を表示

【PHP】あなたのオブジェクト指向を深める – クラスとインスタンス

# クラスとインスタンス
オブジェクト指向は、変数と関数をまとめて箱に入れて、ソースコードの再利用性を高める工夫でした。この変数と関数をまとめる箱をクラスとよびます。クラスに入れた変数をプロパティ、関数をメソッドとよびます。よび方は違うだけで、プロパティは変数、メソッドは関数です。

クラスに入れることで、変数と関数を一つにまとめることはできました。しかし、`Person`には`suzuki`も`tanaka`もあり、一つの箱だけでは不十分です。そこで、クラスをコピーして増やせるようにしました。クラスをコピーして生成するのがインスタンスです。生成したインスタンスのプロパティを変更して、`suzuki`や`tanaka`などのオブジェクトを作ります。

![](https://storage.googleapis.com/zenn-user-upload/e8e6f5ccd00d-20221113.png)

:::note info
クラスをコピーしてインスタンスを生成する
:::

# クラスを定義しよう
`Person`のクラス定義です。

“`php:sample2-1.php

元記事を表示

【PHP】あなたのオブジェクト指向を深める – オブジェクト指向の必要性

# はじめに
オブジェクト指向プログラミング(以降、オブジェクト指向)は、同じコーディングを何度もしない(再利用性を高める)ための工夫です。再利用性を高める工夫で、オブジェクト指向でないとコーディングできない機能がある訳ではありません。ですから、なぜオブジェクト指向が必要なのかを理解することが難しいかもしれません。この記事では、初級プログラマにとって第一の関門であるオブジェクト指向の必要性と仕組みを説明します。

:::note info
オブジェクト指向は再利用性を高めるための工夫
:::

# なぜオブジェクト指向が必要なのか
なぜオブジェクト指向が必要かを考えるために、まずはオブジェクト指向ではないPHPのソースコードについて考えてみましょう。このソースコードのように、変数や関数を活用すれば一般的な機能はコーディングできそうです。さらに、関数の部分を別ファイルに切り出せば、必要な時にそのファイルを`include`して関数をコールすれば再利用性もありそうです。では、なぜオブジェクト指向が必要なのでしょうか?

“`php:sample1-1.php

元記事を表示

文字列の出力(echo)

「**echo**」は文字列を出力するための命令。
出力したい文字列は'(シングルクォーテーション)か
“(ダブルクォーテーション)で囲む。

コード:<?PHP **echo** ‘SPW財団’;?>
出力:SPW財団

元記事を表示

[PHP]mysqlで日本語を保存する時に文字化けしてしまう

こんにちは[ありんこ](https://twitter.com/4rinc00)です。
最近パーフェクトPHPをやっているのですが、mysqlでデータを保存した時に文字化けしてしまって困ったので書いておきます。

# TL;DR
PDOをnewする時に、charsetをちゃんと設定しましょう。
“`php
$dbConnection = new PDO(‘mysql:host=db;dbname=online_bbs;charset=utf8’, ‘docker’, ‘docker’);
“`

# どんな感じに困った?
Docker環境で進めているのですが、MySQLの文字コードはちゃんとutf8mb4にしているし、
PHPの文字コードもUTF−8(多分)だし、
HTMLも``ってしているしで詰んだって感じでした。

# 原因
パーフェクトPHPがPHP5系で書かれていて、自分がパーフェクトPHPをPHP8系のバージョンで進めているので使用できる関数に差があったのが原因。
というかPHP7系からmysql系のモジュールが、[MySQLi

元記事を表示

PHPの概要及び書き方

PHPのコードはHTMLに埋め込んで使うことができる。
HTMLで言うところの「タグ」の書き始めに<?php ~と入力し始めることで
PHPのコード入力をスタートさせることができる。
<?php ~ の~部分に命令を入力してから、最後に?>で閉じることで一文が完成する。

例↓↓↓
HTMLのみの場合:<h1>タイトル</h1>
PHPを埋め込んだ場合:<?php echo'<h1>タイトル</h1>` ; ?>
※タグをphpの命令で使用するときは'(シングルクォーテーション)で囲む
 (なんでシングルなの?)

[文法]
・phpの命令は文末に;(セミコロン)をつける

元記事を表示

Laravel: Controllerのstoreメソッドの引数にはRequestをつけよう

# はじめに

Laravel6を用いて、商品のいいね機能を実装していました。
その際、1時間もつまづいたエラーがありました。

|Too few arguments to function App\Http\Controllers\User\Product\RateController::store(), 1 passed in /var/www/ec_Laravel/vendor/laravel/framework/src/Illuminate/Routing/Controller.php on line 54 and exactly 2 expected|
|-|

こちらは、「引数が足りていないよ」みたいな感じのエラーでした。

# 修正前コード

“`web.php
// 中略
Route::resource(‘user/product/{product_id}/rate’, ‘User\Product\RateController’, [‘only’ => [‘store’, ‘update’, ‘destroy’]]);
“`

“`show.blade.php

元記事を表示

PythonとPHPの基本構文まとめ

# Introduction
新しくPHPを学ぶことになった
基本構文を理解するため慣れ親しんだPythonとの比較をまとめる

参考サイト
– [Pythonチュートリアル](https://docs.python.org/ja/3/tutorial/index.html)
– [PHP言語リファレンス](https://www.php.net/manual/ja/langref.php)

# コメント
– ‘C’, ‘C++’ および Unix シェル型(Perl 型)のコメントをサポート
– <$php  ?>タグでコードを囲む必要あり(本記事では以降タグは省略)

“`php:php

“`

“`py:python
# commnet

”’
comment1
comment2
”’
“`

# 出力
– `echo`で出力できるが改行する場合は改行コード`”\n”`が必要
– 改行コードはシングルクォーテーション`’`では単なる文字列として認識さ

元記事を表示

【PHP】処理速度測定方法 ところでin_arrayってほんとに遅いの?

in_arrayを使うなら、連想配列にしてでもissetを使った方が速いという記事を散見します
可読性のよいin_arrayをできれば使いたいので測定してみました

### 目次
処理速度の測り方
issetとin_array 検索に使うならどっちが速いのか?
issetの測定
in_arrayの測定
測定結果
結論

## 処理速度の測り方
とてもシンプル

“`php
// 実行環境 PHP v7.1.8

// 現在時刻をマイクロ秒まで取得
$start = microtime(true);

// — ここに測定したい処理 —

$end = microtime(true);

// 指数表記回避にsprintf()で桁数を6に指定
var_dump(‘XXXを検索 : ‘ . sprintf(“%.6f”,($end – $start)) . ‘秒’ );
“`

## issetとin_array 検索に使うならどっちが速いのか?
検索用配列をつくる

“`php
$arr = [];
for( $i = 0; $i < 100; ++$i ){ $arr

元記事を表示

【Laravel】日付をparseできなかったとき500で落ちるのを回避したい

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## パラメータに不正な日付のフォーマットで渡ってきたとき
日付が「2022-1-1」「2022/1/1」で渡ってきたら問題なく“`parse“`してくれるけど、「2022.1.1」などのフォーマットは“`parse“`できずに500エラーが返ってしまう。

500で返してもフロント側が困るので、Handlerに下記を追加。
ステータスコード400で“`Carbon“`のエラーメッセージをキャッチしてそのまま返すようにした。

“`php
use Carbon\Exceptions\Exception;

public function register()
{
$this->renderable(function (Exception $e) {
$message = $e->getMessage();
$errorMessage = [
‘message’ => $message,
];

return (new ErrorResourc

元記事を表示

わかったふりをしていたphp-fpmってなんなのかを図解してみた

# PHPの実行には種類がある

何言ってるんですか?PHPはPHPでしょ?っていう人ほんとは僕だけじゃないですよね?

WEBサーバーがHTTPリクエストを受け取ったあとにPHPのプログラムが実行されるわけですが、その実行方法には種類があるというのです。

その種類についてウルトラ簡単に図解してみました。

# Apache モジュール版

![draw.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2373655/691823dc-1a2a-9ff5-5bcd-bd61fdd925ad.jpeg)

ついこの間までWEBサーバーの代名詞とも言えたApacheですが、この方法ではPHPの処理はApacheに内容されたようなイメージで実行されます。

PHPのサーバーでの処理プロセスが、Apacheと同じプロセス内で実行されています。

この方法は比較的高速にPHPを実行することができます。

そのためかつてはメジャーな実行方法だったなという印象でした、たぶん。

デメリットがあるとすれば

元記事を表示

PHP+JavaScriptでSPA開発(WSL2/Docker)

## はじめに

PHPとJavaScriptを使って、非同期で動くToDoアプリを作成します。フレームワーク等を使わずに実装していきます。

#### 作成するアプリの仕様
– タイトル、内容の追加

– 文字数のバリデーション機能

– 削除

元記事を表示

SalesforceのWeb-to-リードでサーバーにリクエストを通してから、Salesforce に登録する。

## Web-toリードとは
Salesforceにリードを登録するときに直接フォーム->Salesforceに登録できるものです。
フォームの作成もポチポチ設定すればできるので非常に便利ではあるものの、
フォームのバリデーションはフロントのみでバックエンドを通さないのでできなかったりするのでそのまま使うと少々不便だったりします。

## どうやったか
フォームの作成で生成されたパラメータを元に
バックエンドでGuzzleでリクエストしただけです。
これについて調べると、curlでの英語の記事しかなかったので、サクッと記事にしました。

“`php5
use GuzzleHttp\Client;


.
class SalesforceWebToLeadService
{
public function post(array $params)
{
// $params は key-valueでパラメータを作成してください 例: first_name => ‘HOGE’ など
// oidは必ず入れる
$par

元記事を表示

PHP laravel 新規作成方法まとめ

Dockerでの新規作成方法まとめの自分用メモ
# PHP
“`shell
docker run -p 4000:80 -v ${PWD}:/var/www/html -d php:apache
“`
参考:https://gray-code.com/blog/php-on-docker/
mysqlもつける場合: https://and-engineer.com/articles/Ybx0hREAACEAgRY9

# laravel sail
“`shell
curl -s https://laravel.build/ |bash
“`
とか
“`shell
curl -s “https://laravel.build/?PHP=81″ |bash
“`
参考: [Amazon プロフェッショナルWebプログラミング Laravel〈最新Laravel 9対応〉](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%8

元記事を表示

laravelで実際に発行されたSQLと処理時間を確認する

## はじめに
いつも忘れるので備忘録として残しておく

## コード
~~~php
DB::enableQueryLog();
$time_start = microtime(true);

//計測したい処理やSQL(複数発行されれば複数dumpされる)
$user = User::where(‘id’, 10000)->get();

$time = microtime(true) – $time_start;
dump($time);
dd(DB::getQueryLog());
~~~

## 発行されるSQLを確認したい時
~~~php
$user = User::where(‘id’, 10000)->toSql();
dd($user);
~~~

## おまけ
取得したコレクションを配列にしてログに吐く
~~~php
$user = User::where(‘id’, 10000)->get();
LOG::info(print_r($user->toArray(), true));
~~~

元記事を表示

GoogleHomePlayerを非同期実行させる

# 1.はじめに

 ジュークボックスサーバーを造ったのですが、言っても再生リスト順に再生開始、停止させているだけです。ただ、リクエスト元のgoogleAssistantからはジュークボックスの状態とは(だいたい)無関係に要求を投げて来るので、適時応答を返してあげる必要があります。
 その仕掛けとしてフルフィルメントとジュークボックスの間にキューを置いて、同期しないようにしています。
 ジュークボックスは定期的にキューを参照してリクエストがあればその要求に応じた動作をする――わけですが、キューの参照間隔(下図の①)が長いとレスポンスが悪くなり、キューサイズも有限ですからパンクする可能性が高まります。
 キューの参照間隔を大きく左右するのはgoogleHomePlayerの実行動作になります。そもそも1曲の再生が終わるまで次の曲に移れません。実装では無駄にCPU利用率が上昇しないように1秒以下のスリープを入れていたりするのですが、曲の再生では3分くらいはかかるのでスパンが2桁ほど違います。
 つまり、以下2点を実装する必要があります。
1)曲の再生終了は拾わなければならない
2)キューの

元記事を表示

プログラミング学習総括(半年)

## はじめに
プログラミング学習を始めて半年が経ちました。非常に大変でしたが、自分も驚くほど成長できたと思います。

## 1.学習成果
| | 項目 | 時間(h) |
| —- | —- | —- |
| プログラミング言語 | java, spring boot | 90 |
| プログラミング言語 | php | 100 |
| プログラミング言語 | javaScript | 30 |
| プログラミング言語 | HTML&CSS | 20 |
| 資格 | ITパスポート | 70 |
| 資格 | 基本情報技術者試験 | 120 |
| その他 | Git, GitHub, AWS, Linux, SQL(MySQL, oracle), 環境構築等 | 70 |
| 合計 | ー | 約500 |

## 2.感想
未経験からWeb系会社へ転職するには1年間(**1000時間の学習時間**)が必要だと言われています。
私は最初何もわからない状態からスター

元記事を表示

Laravel9 artisanコマンド 一覧

実際に使用した、Laravel artisan コマンドを備忘録的にまとめていきます。
(随時返信、Laravel9用)

## ルーティングの一覧を作成

“`
// ルーティングの一覧を、ターミナルでパパっと確認したい時
% php artisan r:l
(% php artisan route:list も可)
“`

“`
% php artisan r:l

GET|HEAD / ………………………………………………………………………………………………………………
POST _ignition/execute-solution ………………….. ignition.executeSolution › Spat

元記事を表示

Ubuntu22.04にPHPをバージョンを指定してインストール

2022.11.12現在
# 環境
1. Ubuntu22.04

この記事ではUbuntu22.04でPHP7.4(を含めた過去バージョン)のインストール方法を示します。

# PHPのインストール
## 通常版
“`console:cmd
$ sudo apt install -y php
“`
有無を言わさずPHP8.1がインストールされます。

## バージョン指定版
### バージョン7.4の存在確認
“`console:cmd
$ sudo apt search php7.4
libapache2-mod-php7.4/jammy-updates,jammy-security 8.1.2-1ubuntu2.8 amd64
Transitional package
“`
何かヒットしますがPHP7.4本体ではない模様

### リポジトリを追加
Ubuntu22.04の標準リポジトリにはPHP7.4がない為、PHP7.4を持っているリポジトリを追加
“`console:cmd
$ sudo add-apt-repository ppa:ondrej/php

元記事を表示

laravelとstripeで決済する

今までコピペコピぺで凌いできたので整理する

まずはプロジェクトを任意のディレクトリに作成
“`
composer create-project laravel/laravel stripetest “8.*” –prefer-dist
“`
(これでできない場合、プロジェクト作成の段階でバージョンに原因があったり、使っているサーバーのPHPのバージョン、composerのパス等調べてみてください。)

続いてプロジェクト内に入ります。
“`
cd stripetest
“`
そしてstripeのパッケージが要ります。casierというパッケージをインストールしましょう。
“`
composer require laravel/cashier
“`

ところがどっこいエラーが出ることも
“`
Your requirements could not be resolved to an installable set of packages.

Problem 1
– Root composer.json requires laravel/cashier ^

元記事を表示

OTHERカテゴリの最新記事