- 1. PHPのOOPについて自習したことをまとめてみる②(クラス定数について)
- 2. Factory MethodパターンのメリットとPHP実装例
- 3. PHPのOOPについて自習したことをまとめてみる③(継承について)
- 4. PHPのOOPについて自習したことをまとめてみる③(アクセス修飾子について)
- 5. PHPのOOPについて自習したことをまとめてみる②(__construct, __destruct について)
- 6. PHPのOOPについて自習したことをまとめてみる①(クラスの定義について)
- 7. $thisとは
- 8. Docker × Laravel Vueをインストールしてログイン機能まで実装する
- 9. シンプルなRESTFull API を PHPでちゃちゃっと作りたい場合
- 10. 【PHP】遅延静的束縛 static/self/parent
- 11. 【PHP8.0】PHP8.0の新機能
- 12. Template Methodパターンを使うメリットとPHP実装例
- 13. Laravelのpluck()でunicodeが表示される。
- 14. Docker(LEMP環境)にMailHogを追加したときのメモ
- 15. execでSQLが実行できない→半角スペースが原因だった(PHP+MySQL)
- 16. phpとPostgreSQLでGoogle Homeを音楽プレイヤー(アルバム再生版)
- 17. 初心者がSlimをインストールしてみた!
- 18. CakePHP3 の Cell を利用してアクセスカウンターを実装
- 19. 【PHP,Laravel】PHPから変数や配列をまとめて送り、Laravelで表示する方法
- 20. Laravel×Docker×Dusk×Seleniumでのテスト実行
PHPのOOPについて自習したことをまとめてみる②(クラス定数について)
・宣言した定数は変更できません。
“`php:const1.php
“`
・クラス定数の使い方には、クラスの外部からアクセスする場合と、クラスの内部からアクセスする場合があります。・クラス名、スコープ解決演算子(::)、定数名の順に使用することで、クラスの外部から定数にアクセスできます。
“`php:const2.php
byebye();
?
Factory MethodパターンのメリットとPHP実装例
## Factory Method パターンとは
Factory Methodパターンは、インスタンスの生成をサブクラスにまかせることで、呼び出し元を生成されるインスタンスの具体的なクラスから解放することを目的としたデザインパターンです。文章ではよくわからなかったので、具体例を挙げます。
通常は次のようにインスタンスを生成します。
“`php
$product = new Product();
“`これをインスタンス生成を担うメソッドに置き換えるのがFactoryMethodパターンです。
“`php
public function factoryMethod() : Product
{
return new Product();
}
“`クラス図で表現すると次のようになります。
![スクリーンショット 2020-08-10 11.26.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500854/076fae27-e573-9bd7-ef52-183677d9c404
PHPのOOPについて自習したことをまとめてみる③(継承について)
“`php:extends1.php
name = $name;
$this->color = $color;
}
public function intro() {
echo “The fruit is {$this->name} and the color is {$this->color}.”;
}
}// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
public function message() {
echo “Am I a fruit or a berry? “;
}
}
$strawberry = new Strawberry(“Strawberry”, “red”);
$strawberry->message(
PHPのOOPについて自習したことをまとめてみる③(アクセス修飾子について)
###public, protected, privateについて
・public-プロパティまたはメソッドはどこからでもアクセスできます。これがデフォルトです
・protected -プロパティまたはメソッドは、クラス内およびそのクラスから派生したクラスによってアクセスできます
・private -プロパティまたはメソッドはクラス内でのみアクセスできます・アクセス修飾子は、プロパティとメソッドにつけることができる。
<プロパティにつけた場合>
“`php:accessproperty.php
name = ‘Mango’; // OK
$mango->color = ‘Yellow’; // ERROR
$mango->weight = ‘300’; // ERROR
?>
“`
<メソッドにつけた場合>“`php:accessmethod.php
PHPのOOPについて自習したことをまとめてみる②(__construct, __destruct について)
###__construct関数の使い方
“`php:construct.php
name = $name;
$this->color = $color;
}
function get_name() {
return $this->name;
}
function get_color() {
return $this->color;
}
}$apple = new Fruit(“Apple”, “red”);
echo $apple->get_name();
echo “
“;
echo $apple->get_color();
?>
“`
・set_〇〇関数が必要なくなるので、コード量が減る。###__destruct関数の使い方
“`php:destruct.php
PHPのOOPについて自習したことをまとめてみる①(クラスの定義について)
###参考にしたサイト
https://www.w3schools.com/php/php_oop_what_is.asp###クラスの定義
“`php:makeClass.php
name = $name;
}
function get_name() {
return $this->name;
}
}
?>
“`
・クラスとは→プロパティ(変数)やメソッド(関数)を集めたまとまりのこと。
###クラスの定義2
“`php:makeClass.php
name = $na
$thisとは
#$thisとは
PHPでスコープ外で定義された変数を利用するための擬似変数
#thisがある時とない時の違い
“`
class numbers{public $number = ‘one’;
public function saynumber(){
$number = ‘two’;echo $number;//出力結果はtwo
echo $this->number;//出力結果はone
}
}
“`
Docker × Laravel Vueをインストールしてログイン機能まで実装する
DockerでLaravel環境を構築する記事を書きましたが、
Vue以外にもReactを選択したり、フロント側はそもそもリポジトリを分けて開発する場合もあり前回の記事では紹介しきれていませんでした。今回はLaravel環境を構築したあと、Vueのインストールまで試してみます。
## Laravel UI とは
Laravelバージョン `5.8` までは、`php artisan make:auth` というコマンドが用意されていましたが、 `Laravel 6.0` 以降は Laravel UI パッケージに切り離されました。
– https://github.com/laravel/ui
– https://readouble.com/laravel/7.x/ja/frontend.html
– Laravel7はlaravel/uiは2.x系
– https://readouble.com/laravel/6.x/ja/frontend.html
– Laravel6はlaravel/uiは1.x系## 前提
[最強のLaravel開発環境をDocker
シンプルなRESTFull API を PHPでちゃちゃっと作りたい場合
## how to use
### composer の インストール“`bash
$ docker pull composer
$ alias composer=’docker run –rm -it -v $PWD:/app composer’
“`### slim4-api-skeleton のインストールと設定
“`bash
$ composer create-project maurobonfietti/slim4-api-skeleton [my-api-name]
$ cd [my-api-name]
$ composer install
“`### 立ち上げと確認
“`bash
$ docker-compose up -d –build
$ curl http://localhost:8081/{“api”:”slim4-api-skeleton”,”version”:”0.22.0″,”timestamp”:1596992058}
“`### src/Controller/Home.php
“`php
【PHP】遅延静的束縛 static/self/parent
#はじめに
PHP資格勉強中の備忘録として記事を書きます。
内容は「PHP5技術者認定上級試験問題集」に出てきたものをまとめています。static/self/parentが示すスコープで、どのクラスのメソッドが
呼び出されるのか本当にややこしかったのでまとめます。#まとめ
| |スコープ |
|———|:——————————|
|self:: |selfが記載されたクラス |
|static:: |非転送コールのクラス |
|parent:: |parentが記載されたクラスの親クラス|– 転送コール
– self、static、parentによる静的メソッドのコール
– 非転送コール
– 明示的にクラス名を指定したもの(クラス名::メソッド名)#self
selfは**「selfが記載されたクラス」**がスコープとなる。
よって以下の実行結果は**「foo」**となる。“`php:
【PHP8.0】PHP8.0の新機能
[PHP8.0](https://qiita.com/rana_kualu/items/fe7998fbe773544d5d25) / [PHP7.4](https://qiita.com/rana_kualu/items/50f9f5735321fe995ff5)
2020/08/04にPHP8.0が[フィーチャーフリーズ](https://wiki.php.net/todo/php80)しました。
言語機能に関わるような機能の追加・変更が締め切られたということです。
今後はデバッグを繰り返しながら完成度を高めていき、2020/12/03にPHP8.0がリリースされる予定です。というわけで[PHP8.0で対応することが決まったRFC](https://wiki.php.net/rfc#php_80)を見てみましょう。
# RFC
## JIT
賛成50反対2で受理。
PHP8の目玉、[JIT](https://qiita.com/rana_kualu/items/ba312d2789bd228f887a)です。PHPをネイティブコードにコンパイルし、さらにコンパイ
Template Methodパターンを使うメリットとPHP実装例
## Template Methodパターンとは
Template Methodパターンは、一連の処理の大まかなアルゴリズムをあらかじめ定義しておき、具体的な実装はサブクラスに任せることを目的としたデザインパターンです。フレームワークを構築するための手段としてよく利用されるそうです。
最初は普通の抽象メソッドとの違いがよくわかりませんでしたが、実装例を見て疑問が解消しました。
下記のdisplay()がTemplate Methodと呼ばれるものです。
“`php
abstract class AbstractDisplay
{
/**
* オープン => 5回プリント => クローズ
* という大まかな流れだけが決まっている
*/
public function display(): void
{
$this->open();
for ($i = 0; $i < 5; $i++) { $this->print();
}
$this->
Laravelのpluck()でunicodeが表示される。
## 問題
formに初期値を入れたくて、LaravelのEloquentで取得した行から
該当するカラムを取得する際に、unicodeでエンコードされた文字列が出力される。“`PHP:controller.php
$content = Model::where(‘id’, $id)->first()->pluck(‘content’);return view(‘admin.event_chat’)
->with(‘content’, $content)
“`“`blade:view.blade.php
Docker(LEMP環境)にMailHogを追加したときのメモ
開発開始時からすでに用意していたDockerコンテナ環境で、急遽メール認証機能を実装するためメールの動作確認できるようにMailHogを設定した。結構手こずったが、多角的に調査して仮説を検証。メンターさんの力も借りてなんとか完了。
# MailHogとは
メールのテスト確認ができるツール。例えば、メール送信の動作をした場合実環境にはメールは送られず、MailHogがメールを受信する。ブラウザでメール送信のプログラムの動作ができているかが容易にできる。#ツリー構造
今回の作業に主に関係あるのは、直下にあるdocker-compose-yml、docker/phpディレクトリにあるDockerfile。またphpの設定確認用に直下に`phpinfo();`を記述したinfo.phpを置いておく。“`ツリー構造
├── app
├── css
├── docker
│ ├── php
│ └── web
├──docker-compose.yml
├──info.php
├── js
execでSQLが実行できない→半角スペースが原因だった(PHP+MySQL)
#execでSQLが実行できない
PHPの勉強をしていてデータベースには接続されているのにSQLが実行できないという不具合がありました。
###原因は半角スペース!
【間違ったソースコード】
“`php
getMessage());
}$count = $db->exec(‘INSERT INTO ………’);
print($count.’件数のデータを挿入しました’);
“`SQLが実行できたソースコード
“`php
phpとPostgreSQLでGoogle Homeを音楽プレイヤー(アルバム再生版)
#始めに
前作[phpでgoogle homeを簡易音楽プレイヤー](https://qiita.com/yoshiki9636/items/5cc8b04cebf2eb298b40)ではphpで書く1スクリプトでGoogle homeで音楽を再生してみようというコンセプトで作ってみましたが、1曲単発再生のみという音楽プレイヤーとしては致命的な仕様でした。Google Homeの音楽再生機能にはリクエストキューの機能は無いため、アルバムの複数曲再生には、スクリプト側でリクエストを待つ機能が必要となります。phpだけで作るのは面倒なことがわかり、crontabを使用して再生コマンドを予約する方式をとることにしました。また、楽曲データがitunesから取得できることが分かったので、PostgreSQLを使ってデータを管理してみることにしました。夏休みのプログラミングで趣味でポチポチ書いたものなので、簡単なコードですので、よろしかったら読んでみてください。
#参考サイト・文献
[phpでgoogle homeを簡易音楽プレイヤー](https://qiita.com/yoshiki96
初心者がSlimをインストールしてみた!
Laravelで幾つかアプリケーションを作ったので、もう一つくらいフレームワークを触ってみようとSlimを導入してみました。
#Slimとは
Slimとは**軽量フレームワーク(マイクロフレームワーク)**の一種であり、アプリケーションが動くのに必要な機能を最低限のみ兼ね備えたフレームワークです。
ちなみに、LaravelやCakePHP等たくさんの機能を兼ね備えたフレームワークは**フルスタックフレームワーク**といい、マイクロフレームワークとは対照的なものになります。
その為、フルスタックフレームワークと比べ処理速度が速く、ファイル容量も軽くなります。
#インストール手順
##スペック
OS:Windows10 Home 64bit
php Version: 7
Composer version:1.8.6
##Composerのインストール
Slimをインストールする際は、Laravelと同様にComposerを予めインストールされてあることが必要になります。
今回は既にインストールした状態で行った為、こちらの記事をご覧になっている方でComposerをまだインストールしていな
CakePHP3 の Cell を利用してアクセスカウンターを実装
# はじめに
私が運営しているブログ (駆け出しです) にサイトへの訪問者を表示させたかったので、アクセスカウンターを実装してみました。
CakePHP3 にはCell という機能があるので、こちらの機能を使ってみました。
※ブログ『CerisierAvantech FC-スリジエ・アバンテック FC』
URL:https://avantech-fc.com/## 環境
* OS: Windows10
* PHP: 7.4.1## 仕様
* リロードしてもカウントされない
* 自宅からのアクセスは対象外# Cellのファイルを作成 (コントローラーの役割)
* display()では実行するための条件文、内部関数のgetCount()ではカウント処理を行なう。
* カウントを行う際は $counter_file で指定したファイルに書き込む。
* ○○○.○○○.○○.○○○ には自宅のIPアドレスが入ります。“` php:site\src\View\Cell/CountsCell.php
【PHP,Laravel】PHPから変数や配列をまとめて送り、Laravelで表示する方法
とても悩んだので、プログラムを簡略化して記録します。
#問題点
“`
name | number | text
test | 1 | test
sample| 2 | sample
“`以上のようなとき、一行目しか変数に入らない!
#できた時のプログラム
“`index.php
$count = 1;$db = pg_connect(“host=host port=5432 dbname=dashboard user=postgres password=○○” );
if(!$db)throw new Exception(“DB接続に失敗しました。”);$search = pg_query(“SELECT *FROM board_posted;”);
if (!$search)throw new Exception(‘クエリーが失敗しました。’);//ここからポイント
for($i=0;$i
Laravel×Docker×Dusk×Seleniumでのテスト実行
### はじめに
インターン現場でLaravelを使用しており、テスト環境の構築を行いました。テストツールとしてDuskを使用し、seleniumとの連携という構成をとり、導入で何度かつまづいたので自分メモとして残したいと思います。
### Duskって?
[-ドキュメント](https://readouble.com/laravel/5.7/ja/dusk.html)
Laravelが標準で用意している、ブラウザの自動操作によるテストAPI。
テスト中はブラウザが勝手に動くのを眺めながらのんびりできます(笑)Duskは「$php artisan dusk:install」でコマンドインストール後、すぐに使えます。
しかし今回は現場の意向でデフォルトのChromeDriverの使用ではなくseleniumを使用することになりました。### 目標
##### –開発環境—
– Laravel 6.18.26
– Docker(Docker-compose) 19.03.8docker環境でDusk × seleniumでテストを実行することを目標と