darudaru

だるだるしてるエンジニア

PHP

PHPのNullableな型宣言

PHP

最近PHP7でプログラムを書いたりしてます。 PHP7から使えるようになった型宣言を使って、型で最初から縛れるのはいいなー、気持ちいいなー、と思いながらプログラミングしてたのですが、 「あれ、でもnullの可能性がある場合はどんな風に型宣言すればいいん…

PHPの静的変数(static変数)を知る

PHP

GithubでPHPのコードを読んでいたら、見慣れない変数の宣言方法を見かけました。

gulpでPHPUnitを自動実行させる

普段、vimを使ってPHPで開発をしているのですが、開発中はgulpを使ってPHPUnitを自動実行させています。そのテストコード実行環境をご紹介。 gulpについては前にこちらの記事でまとめてますのでご参考までに。 blog.darudaru-life.com 準備 gulpと、PHPUnit…

CodeceptionでSelenium WebDriverを使う

CodeceptionでSelenium WebDriverを使った話。 Codeceptionの導入までは前に書きましたのでそちらを参考にしていただければと。 blog.darudaru-life.com 準備する Javaはあらかじめインスールしておくこと。 Selenium Standalone Serverをダウンロードする …

PHPのCodeceptionでE2Eテスト

PHPでE2Eテストが作れるCodeceptionが簡単に使えてとても良かったという話。 Codeception インストール composerでインストール Codeceptionをインストールしたいディレクトリ配下でcomposerでインストールを行う。 composer require "codeception/codecepti…

proxy経由でcomposerを使う

PHP

なかなかproxyを突破できずハマりまくった。 proxyを突破するためには .bashrcに環境変数を追加する HTTP_PROXY=http://proxy-host:proxy-port/ HTTPS_PROXY=http://proxy-host:proxy-port/ 追加したら、composerが動くかチェックする。 composer diag エラ…

DateTimeImmutableを使ったらどれくらい遅くなるのか

PHP

DateTimeImmutableのformat()を頻繁に使っていたら、コードレビューで「速度が気になる」と指摘を受けたので計測してみました。 先に結果 やっぱりDateTimeImmutableの関数の使用回数を減らしたほうが速い 計測 DateTimeImmutableのformat()で年月日を毎回取…

DateTimeImmutableで日時を扱う

PHP

DateTimeImmutableクラス PHP5.5以上から使える DateTimeは参照渡しなので自身のオブジェクトが変わっていくが、DateTimeImmutableは新しいオブジェクトを返す モダンなやり方だって聞いた 使い方 現在の日時を取得する format('Y/m/d H:i:s'); // 2017/04/3…

PHPUnitの知らなかったアノテーション

アノテーションとはメソッドのコメント部分に書く@で始まるタグのこと。 /** * @アノテーション名 引数 */ こう使う。 PHPUnitでテストコードを書くことが多いのですが、最近アノテーションの存在を知り、これは便利だなと思ったという話。 いいなと思ったア…

macでphpのバージョンを切り替える

PHP

php7が入っているmacでphp5.6の環境を必要になったので、phpenvでphpのバージョンを切り替えられるようにしました。 phpenv GitHub - CHH/phpenv: Thin Wrapper around rbenv for PHP version managment 「phpenv」でググると他にもphpenvと名がつくリポジト…

名前空間があるXMLをPHPでパースする

PHP

Gmailでフィルタリングしている対象のメールのsubjectを取得したくて、フィルタのXMLをパースするプログラムを作ったけれども、空でしかデータが取得できず四苦八苦しました。 取得したいデータはXMLの名前空間を使って定義されていたのですが、PHPで名前空…

PHPの演算子を改めて調べてみたら新しい発見があった

PHP

先日、「xor」というPHPの演算子を初めて知りました。改めてPHPのドキュメントの演算子の項目を眺めていたら、意外に知らない演算子や使い方を知ることができたので、演算子についてまとめてみます。調べてみると意外に面白い演算子。 代入演算子 +$a $a を…

PHPUnitでechoやprintなどの出力処理をテストする

テストしたいコードにechoやprintなどの出力処理がある場合、PHPUnitでどうやってテストコード書いたらいいんだろう?って調べたのでまとめておく。 テストしたいコード

Travis CIでcomposerのautoloadが効かずに悩んだ話

PHP

デザインパターンを学ぶために各デザインパターンのコードをPHPで書きつつ、勉強もかねてテストコードも書いているのですが。そのテストコードをCI環境で走らせてみようと思い、Travic CIを使おうとしたら、composerのautoloadがきかずにfatalエラーが出てか…

PHPでデザインパターン「Builderパターン」

PHP

GoFデザインパターンをPHPでプログラムを書いてみながら勉強していきます。「増補改訂版 Java言語で学ぶデザインパターン入門」を参考にさせて頂いています。プログラムはGithubにあげていきます。 Builderパターンとは builderとは、日本語で建築者、建造者…

PHP5の型宣言(タイプヒンティング)

PHP

あんまり自分が活用できていないPHPの型宣言について、今更ですがまとめてみました。ずっと「タイプヒンティング」っていう言葉を使っていたけれど、PHPの公式ドキュメントを読んでいたら型宣言って呼ぶように変わっていたっぽいので、型宣言の言葉の方を使…

PHPでデザインパターン「Template Methodパターン」

PHP

GoFデザインパターンをPHPでプログラムを書いてみながら勉強していきます。「増補改訂版 Java言語で学ぶデザインパターン入門」を参考にさせて頂いています。プログラムはGithubにあげていきます。 Template Methodパターンとは テンプレートの機能を持つパ…

MacにcomposerでPHPUnitをインストールする

MacにcomposerでPHPUnitをインストールした時の手順です。composerのglobalコマンドを使用してインストールしました。 環境 MacOS Sierra 10.12.2 composerでPHPUnitをインストールする どのPHPUnitのバージョンを指定すべきかは公式サイトで確認しておきま…

PHPでデザインパターン「Singletonパターン」

PHP

GoFデザインパターンをPHPでプログラムを書いてみながら勉強していきます。「増補改訂版 Java言語で学ぶデザインパターン入門」を参考にさせて頂いています。プログラムはGithubにあげていきます。 Singletonパターンとは singletonとは、要素を1個しか持た…

MacのPHPをPHP5.6にバージョンアップする

PHP

PHPUnitをインストールしようとしたらPHPのバージョンが古いと言われたので、PHPの5.6にバージョンアップしました。以下、その時の手順です。 環境 MacOS Sierra 10.12.2 PHP5.6へのバージョンアップの手順 とりあえずhomebrewでPHP5.6のインストールを試み…

PHPでデザインパターン「Bridgeパターン」

PHP

GoFデザインパターンをPHPでプログラムを書いてみながら勉強していきます。「増補改訂版 Java言語で学ぶデザインパターン入門」を参考にさせて頂いています。プログラムはGithubにあげていきます。 Bridgeパターンとは bridgeは日本語で「橋」という意味です…

homebrewではなく、curlでMacにcomposerをインストールする

PHP

Macにcomposerをいれました。最初、homebrewでインストールを試みたのですが、OpenSSLのバージョンのエラーにひっかかって出来ず、curlを使ってインストールを行いました。ちなみにhomebrewでひっかかったエラーは、「If possible you should upgrade OpenSS…

Fatal error: Allowed memory size of のエラーが出て試したこと

PHP

「Fatal error: Allowed memory size of …」のエラーが発生したときに対応したことのメモ。このエラーはサーバに割り当てられたメモリをオーバーしてしまうと発生します。 1.メモリの上限をあげる 割り当てるメモリの上限を増やす対応です。 php.iniの上限を…

phpのissetには複数の引数を渡すことができる

PHP

知らなかった…。 今までissetで複数の変数をチェックしたい場合は、全て個別で書いていたのですが、そもそもissetの関数の引数は複数対応しているということを初めて知りました。 if(isset($a) && isset($b) && isset($c)){ return true; } つまり上記のよう…

wordpressでプラグインなしで関連記事を表示させる

wordpressには関連記事を表示させるためにプラグインが多く存在しますが、プラグインを利用しないで関連記事を表示させるプログラムを紹介します。プラグインを使用しないのは、その方が軽いからです。 わたしのブログでいう記事ページの下部に表示している…

wordpressのプラグインなしでSEOに適したパンくずを表示させる

wordpressのパンくずをプラグインを使わないでPHPで実装したので紹介します。 パンくずの仕様を決める 頂点をブログトップとし、その下にカテゴリ、記事タイトルという階層構造のパンくずを作ります。 トップ ┝プログラミング ┝映画 ┗雑記 ┗記事タイトル ア…

wordpressでタグクラウドを均一なサイズにする方法

記事が増えてきて、タグクラウドのサイズのバラバラ感が目立ってきたので修正を行いました。 もはや表示崩れのレベル。 なんでタグクラウドのサイズが変わってしまうの? <div class="tagcloud"> <a href='http://darudaru-life.com/tag/php' class='tag-link-7 tag-link-position-3' title='2件のトピック' style='font-size: 16.4pt;'>PHP</a> </div>

ロリポップのサーバでbitbucket-syncを使用して自動デプロイの環境を構築する

wordpressのプログラムを修正する場合に、ローカルで修正して、scpでサーバにファイルをコピーして、公開ディレクトリにコピーして・・・とだいぶ手間がかかってしまっていたので、自動デプロイできる環境をbitbucket-syncを使って構築することにしました。 …

PHPUnitのモックを使う

PHPUnitで既存プログラムのテストコードを書くときに、PHPUnitに用意されているモックを使ってみたので備忘録。 テストコード書く前にconstructで別オブジェクトを呼び出すという依存性の高いコードだったので、切り出す改修もしています。 改修後のテスト対…