Perl日記

PerlとかRubyとかPHPとかPythonとか

PHP

PHPですべてをFにしたかった

PHP

すべてをFにしたかった結果

PHPで関数を返す関数を呼んで関数を呼びたかった(即時実行)

PHP

関数を返す関数を変数に入れて、直接呼びたい。 357 PHP7 問題なし。 PHP5.6 syntax error, unexpected '('怒られた。 他の動かない例 括弧したり変数に入れたり。

PHP7のThrowableを利用したキャッチ

PHP

PHP7からErrorクラスが新設されて、文法エラーのような例外も捕捉できるようになった。Errorクラスも既存のExceptionクラスも、Throwableインターフェースを実装しているので、完全なキャッチは以下のようになる、と思う。 357 //try { // echo add('hoge',…

PHPでArrayOptionクラスを作った

PHP

PHPのArrayは存在しないキーにアクセスすると、Noticeのエラーが発生する。 なので、isset()やら、array_key_exists()をしてから取りに行くのだけど、どうにも面倒だった。最近覚えたScalaのgetOrElse()みたいなことができればいいなと思って、作ってみた。 …

PHPでreset()を使って先頭の要素を取り出しているコードを見た

PHP

int(101) なんとreset()は引数の配列の先頭の要素を返却する。 それを利用して、配列の先頭の要素を取得するために、reset()を使っているコードがあって、 「素直にarray_shift()使えばいいのに…」と、ひどく陰鬱な気分になった。ちなみに内部ポインタは何…

foreachの要素の変数はループを抜けても保持されるのでunset()した

PHP

はまったのでメモ。foreachで配列の中身を直接いじっているコードがあって、その後、同じ変数名を使っていたら中身が壊れてえらい目にあった。先に結論を書くと、foreachのリファレンス変数はforeachを抜けても残っていて、変な動きをしていた。 そしてそれ…

PHPでTraitのメソッド名をasで変更してuseして、うまいことする

PHP

PHPのTraitはuseしたクラスでTraitと同じメソッド名のメソッドを定義すると、それで上書きしてしまう。 foo(); //=> Hoge::foo()====== Traitは継承関係に組み込まれるわけではないので、par…

Laravel5.1入門その11 カスタムバリデーション

PHP

Controllerのアクションの最初にリクエストパラメータをずらずら書くとノイズになりがちだ。 validate($request, [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', // たくさんの // パラメータ //…

ネストは悪ではない話

PHP

言語 PHPの話。 発端 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典出版社/メーカー: オライリージャパン発売日: 2012/06/23メディア: 単行本(ソフ…

PHPの名前空間をuseするときはクラス名まで書く

PHP

ちゃんと理解していなかったので読んだ。PHP: 名前空間 - Manual useするときには名前空間+クラス名で、そのクラス名を修飾せずとも使えるようになる。a.php class Foo\Bar#1 (0) {} PHP5.6以上ならば、同様に、名前空間+関数名とか、名前空間+定数名で…

Laravel5.1入門 その10 はじめてのFacade

PHP

Laravelにおけるファサードとは、デザインパターンのファサードとは全く別物なので注意。 単にAPIを使うための機能と捉えておけばいいみたい。 目的 こんな感じでアプリ内からどこでも動くようにする。 true 本当に動くクラス 巡り巡って本当に動くis_piyo(…

Laravel5.1入門その9 はじめてのサービスプロバイダ

PHP

サービスプロバイダのスケルトンをartisan経由で作る。 $ php artisan make:provider FugaServiceProvider Provider created successfully.app/Providers/FugaServiceProvider.php

Laravel5.1入門その7 はじめてのIoCコンテナ

PHP

Laravelプロジェクト直下に素のPHPを書いてみる。 hoge.php bind('foo', function(){ return ['hoge' => 'fuga']; }); // fooの名前で取り出す $foo = $app->make('foo'); var_dump($foo); //=> array(1) { //=> 'hoge' => //=> str…

Laravel5.1入門その7 MongoDBにつないでみる

PHP

MongoDBをインストール。 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 $ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb…

Laravel5.1入門その6 collectヘルパを使う

PHP

Collections - Laravel - The PHP Framework For Web Artisanslaravel.com collect([])を使うと、Illuminate\Support\Collectionインスタンスが返ってきて、PHPの貧弱なArrayを便利にしてくれる。Eloquentを使うときも、これらの便利メソッドが使える。 firs…

Laravel5.1入門その5

PHP

ミドルウェアの使い方のもっと良い方法がちゃんと書いてあった。 HTTP Middleware - Laravel - The PHP Framework For Web Artisans というかもうRailsぽい。やりたいのは /api以下のリクエストは、API用のミドルウェアを通ってほしい /api以下のレスポンス…

Laravel5.1入門その4

PHP

Laravelは5になってからPSR-4に沿うようになったので、appディレクトリの下を自由に使うのが良いらしい。APIとデバッグ用のページと管理者用のページを作る時にどうするかなと思って、まずやってみた。Controllerの下にApi、Debug、Adminの名前空間を掘って…

Laravel5.1入門その3

PHP

ミドルウェアを触ってみる。 artisanでミドルウェアのスケルトンを作る。 $ php artisan make:middleware AuthenticateUserAgent Middleware created successfully.できた。app/Http/Middleware/AuthenticateUserAgent.php

Laravel5.1入門その2

PHP

app/Http/routes.phpを触る。 text/plain

Laravel5.1入門

PHP

メモ。 Ubuntu14。 PHP5.6入れる。 $ sudo add-apt-repository ppa:ondrej/php5-5.6 $ sudo apt-get update $ sudo apt-get install python-software-properties $ sudo apt-get update $ sudo apt-get install php5 $ php5 -v PHP 5.6.9-1+deb.sury.org~tru…

二重引用符中の認識されないエスケープシーケンス

二重引用符(ダブルクオート)の中にバックスラッシュを置くとき、 「\n」とか「\t」とかのエスケープシーケンスは展開されるけれど、 「\j」のような言語が認識できないようなものがどうなるか、言語間で差が出たのでメモ。 Perl print "$]\n"; print "\j\n…

PHPのジェネレータについてLTしませんでした

PHP

社内勉強会で、時間の関係でできませんでしたが、作った資料がもったいなかったのと、Speaker Deck使ってみたかったので試しに貼ってみます。

PHPでUnix時間からDateTimeオブジェクトを作るときのタイムゾーン設定

PHP

はまったのでメモ。 UnixタイムからDateTimeオブジェクトを作るときに、他のやり方と同じノリでタイムゾーンを第二引数に渡しても効いていなかった。一応、マニュアルにも書かれていた。 PHP: DateTime::__construct - Manual 注意: $time パラメータが UNIX…

PHPのジェネレータまとめ

PHP

PHP5.5から使えるようになったジェネレータについて、社内普及用にまとめる。 ジェネレータとは ジェネレータは、プログラムにおいて、数列の各要素の値などを次々と生成(ジェネレート)し他の手続きに渡す、という機能を持っている手続きである。値を渡す…

PHPの知見がたまったので共有します

PHP

順不同です。 インスタンスメソッド内でのクラス変数取得 from_static() ); //=> array(123, 234, 345) p…

PHPのつらいところまとめた

PHP

半年近くPHP5.3を仕事で使っててつらかったことをまとめた。 キーワードも関数名も大文字と小文字を区別しない h(); // hoge! 複数人で作ってるとほんとこういう些細なところで余計な手間がかかる。 チェックするのを自動化するのも手間。 あるいは、これく…

PHPの関数の引数メモ(デフォルト値の定数、タイプヒンティングのnull)

PHP

関数の引数の挙動メモ。 デフォルト値 デフォルト値は、定数式である必要があり、 (例えば) 変数やクラスのメンバーであってはなりません。 http://php.net/manual/ja/functions.arguments.php#functions.arguments.default定数ならばよいということで、定数…

PHP5.3での無名関数内でのselfや$thisは解決できないから気をつけろ

PHP

ハマったのでメモ。 PHP5.4以降なら問題ないっぽい。 無名関数内でselfや$thisを使うとエラーになる。

PHPのオブジェクトはnewできる

PHP

なんか動いたのでメモ。 str = $str; } } $hoge = new Hoge("hoge"); print_r($hoge); $fuga = new $hoge("fuga"); // ★オブジェクトにnewする print_r($fuga); __construct() is called. Hoge Object ( [str] => hoge ) __con…

PHPのarray_walkはforeachに置き換えよう

PHP

PHP: array_walk - Manual array_walkはforeachに置き換えた方が圧倒的に可読性が良いと思う。 特に引数でそのまま無名関数を渡してしまう場合。 array_walk版 15 // [1] => 25 // [2] => 35 // [3] => 45 // [4] => 55 //) foreach版