エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

php

【PHP】Class Xxx does not existの対応【781日目】

対処しにくいエラー Class App\Controllers\XxxController does not exist こんな感じのエラーを見たことはあると思う。 これは、クラス自体がルールに則って書かれてない時に起こる。 例えば、関係ないところに文字があったりなど。 手元のコードに、てきと…

【PHP】クラスをデバッグするReflectionClassとか【767日目】

クラスについて詳しく知りたい クラス自体をよく知りたい。 このクラスは一体どういう状態なのだろう。 どんな値を持っているのだろう。 テストをしてるときに、正規の方法では取得できないprivateのフィールド値等、今このクラスはどうなってるのかとか。 (…

【PHP】クラスに定義した定数名と値を全て取得したいとき【766日目】

定数を全て確認したい class Items { const MAX_COUNT = 5; const ITEM_NAME = 'Hoge'; } こんなふうにクラスがあって、 php > var_dump(Items::MAX_COUNT); int(5) こんなふうに値が取れる。 でも、『どんな定数名が存在するか』とか、『全部定数がほしい』…

【うっかり】'', "", 文字列の罠【763日目】

うっかり うっかり簡単なミスをしてしまう。 誤字、かっこの数、閉じタグ忘れ等々・・・ ケアレスミスこそ、間違いに気が付きにくい。 故に修正に時間がかかる。 そんなケアレスミスも、パターンを覚えておくと、比較的気づきやすい。 ってことで、ケアレス…

【PHP】constの定数名を動的に変更して取得したい【761日目】

定数を定義した class ClassName { const PARAM_1 = 'a'; const PARAM_2 = 'b'; } でも、こんなふうに数値だけ差がある定数。 for ($i = 1; $i <= 2; $i++) { $array[] = ClassName::PARAM_.$i; } みたいに定数を動的に取得をしたい。でも、この書き方は動か…

if ($x == 3 || $x == 7 ||... のような特定の値の条件分岐を短く書く【753日目】

特定の数値だけ条件分岐したい if ($x === 3 || $x === 5 || $x === 10 || $x === 12 || $x === 17 || $x === 21 || $x === 22 || $x === 28 ) { } こんなふうに、特定の条件で分岐したい。 ただ、見づらい。配列使って書き換えてみる in_arrayを使ってみる …

【phpunit】xdebugじゃ重いテストコードを、早くする【752日目】

テストコードが遅い テストコードが重い、遅い、辛い(´・ω・`) xdebugを使ってテストコードを走らせると、遅い、重いと感じるときがあります。 でも、カバレッジを取りたい。そんなとき phpdbgを経由して動かす (xdebugは切っても大丈夫です) phpdbg -qrr v…

【phpunit】テストコードを書いていないクラスを特定する【750日目】

テストコードを新しく導入したい テストコードを今まで書いてなかった。 なので、テストコードを少しずつ導入していった。 すると気になってくる。『どこまで書いたっけ』 なので、テストコードをどこまで書いたかを特定したい。 カバレッジ取る 単純にカバ…

phpunitで、factoryが動かない時があった話(環境や運で変わった)【741日目】

phpunitでテスト書いてた いい感じに動いてるので、CircleCIで自動的にテストをチェックしようってことになった。 すると、動かない。動くんだけど、たまに動かない。 調べていくと、factoryがたまにうまく初期値を設定してくれてないっぽい。 毎回じゃなく…

phpunitが凄く遅い→xdebugが動いていた【740日目】

自動テストが遅い vendor/bin/phpunit tests/Unit/App いつもどおり、自動テストを走らせてました。 いつも一個のテスト辺り1秒くらいかかっている。全部走らせると30分くらいかかる。 これはおかしいなと思った。 結論 xdebugが動いていた xdebug、今回使っ…

エルビス演算子(?:)で代入とかをスマートに書く【739日目】

if文で代入を書く if ($user) { $item = $user; } else { $item = $request['user']; } もし、$userがtrue相当だったときには$userを代入し、 そうでなければ別な値を使う。 よく書くif文ですね。 if ($user) { return $user; } else { return $request['use…

【PHP】無名関数・クロージャ。変数に関数を入れたり出来る【734日目】

変数に関数 こんなコードを見たことはありませんか。 $func = function ($num) { return $num *2; }; $arr = [ 'id' => 1, 'item' => function ($num) { return $num * 2; } ]; $mul_num = 3; $func_use = function ($num) use ($mul_num) { return $num * $…

【PHP】改行文字を<br>に変更して表示させる【721日目】

改行を使いたい 画面に文字を表示させたい。 このとき、DBなど外部から改行の入った文字が取得出来たとする こんにちは はじめまして これをHTMLとして出力するときに、 <p></p>とするとどうなるか。 <p>こんにちは はじめまして</p> HTMLの改行は意味がないので こんにち…

【PHP】abstractクラスにfinalオプションを付けるとどうなる?【718日目】

abstractクラス 抽象クラス。 なんで抽象クラスと呼ばれるものかは割愛。 このままでは実態がなく、インスタンス化出来ないので、継承とかをして具体的なクラスにしないといけない。 final これ以上クラスが変動することはないよというオプション。 変数なら…

【PHP】traitでオーバーライド元の関数を使いたいとき【712日目】

traitを拡張したい Laravelの中にあるtraitを拡張したいとか、traitをさらに継承するように使いたい。 use Illuminate\Foundation\Auth\AuthenticatesUsers as BaseAuthenticatesUsers; trait AuthenticatesUsers { use BaseAuthenticatesUsers } こんな感じ…

【PHP】PHPとLaravelのバージョンアップで苦しんだのメモ【699日目】

これはメモです ってことで、改めて後日まとめるかもしれないです。 PHP 7.0->7.1 countの引数 count関数の引数がnullを受け付けなくなりました。 nullが来た場合、配列を入れてくださいってエラーが出ます。 Laravel 5.2->5.3 Paginator.phpのpresenterが消…

【PHP】interfaceは継承・多重継承が可能。読み込みの順番もあり?【697日目】

interfaceの継承 interface A { public function a(string $a, int $b); } interface Foo extends A { } これ、動きます。Fooはa()の実装を強制出来るinterfaceになりました。 interfaceの多重継承 interface A1 { public function a(string $a, int $b); } …

【正規表現】()内で `?:`使って、preg_matchなどの検索結果に含めない【690日目】

グルーピングに使う()で不便なこと 正規表現を書くときに、 /(aaa)([0-9])(aaa)/ このように、ひとつのまとまりを表現するために、 ()を使うときがあります。 しかしこのとき、結果を \1などで選択するときには、 ()の数を数えて、何番目かを確かめないとい…

【思考メモ】自動テストの目的・意味の違い?【682日目】

思考メモ ちょっと雑に思ったのをこちらに書き写した感じなので、上手くまとまってないかもですm( )m 外部の関数と引数、どちらに注目する? (あえてdataProvidor使わず書きました) function testA() { Mockery::shouldRecieve('aaa')->andReturn('a'); ....…

【PHP】null合体演算子(??) エルビス演算子(?:)の違い【669日目】

??と?: $a ?: nullや $a ?? nullという表記はよく見ると思います。 特に右は結構書く機会多いですね。 では、これらが何をしてるんでしょうφ(・・ 両方とも、if文の省略 どんな演算子かというと、両方ともよく使うif文の省略系だったりします。 三項演算子をご…

【PHP】エラーの時に出るスタックトレースのようなものを出力する【663日目】

スタックトレースっぽいのを見たい エラーが発生した時とかに見れる、どこの関数で何が呼ばれて・・・ そんなスタックトレースを、エラーを発生させずに確認したい。ログに吐きたい。 スタックトレースじゃない バックトレースってのが出ます。 出てくるのは…

【PHP】変数未定義と配列の未定義の違いの考察【654日目】

注意 根拠のない個人的考えです!ようするにポエムです! こういう理由があるんだよ!って意見があれば、ぜひ教えていただけると嬉しいです。 issetで疑問に思った PHPには、issetという関数が存在します。 https://www.php.net/manual/ja/function.isset.ph…

【PHP】正規表現の区切り文字を変えて、エスケープを減らす【650日目】

正規表現 /ringo/ こんなふうにスラッシュではさみますよね 挟む文字を変えれる #ringo# こんなふうに書くことも出来ます。 何がいいの? スラッシュをエスケープするのを省ける /uri\/ringo/ #url/ringo# こんなふうに、正規表現のパターンでスラッシュを使…

【PHP】配列の中身をすべて書き換える処理の書き方3つ【647日目】

配列の中身をすべて書き換えたい 例えば、数字が入った配列をすべて2倍にしたい。 [1, 2, 3, 4]が、 [2, 4, 6, 8]になるようにしたい。 1.forと配列のインデックスを使う $array1 = [1, 2, 3, 4]; $array_length = count($array1); for($i = 0; $i < $array_…

読みやすいプログラムを書くために。判定用の数値は判定の時に算出する【640日目】

学んだこと $has_という変数名をつけず、データの取得と、countなどの判定とで処理を二段階に分けるのも手 has_xxxのような変数を作っていた $has_user_item = !($items->where('item_type', 'user')->empty()); if (!$has_user_item) { このように、if文内…

読みやすいプログラムを書くために。否定の否定を書かない【638日目】

学んだこと if (! $has_no_ )って否定の否定のコードは、正しく解釈するのが難しくなる 否定の否定文 $has_no_items = ..... // ない場合 if ($has_no_items) { .... } // ある場合 if (!$has_no_items) { .... } 言うまでもなく見づらい 変数名を変える $ha…

読みやすいプログラムを書くために。否定の変数名の言い換え【637日目】

学んだこと その後のコードで反転する目的で、 $is_xxx $has_xxxを変数をつけるなら、$is_not_ $has_notを変数名をつけるのも手 is_not_xxx は、(is not)xxxか、is(not_xxx)とどちらで解釈するか迷うので、最善手とは限らない xxx_items_are_emptyなど、反対…

読みやすいプログラムを書くために。式を一度変数に入れる。【636日目】

私がコードを書いたときに頂いたアドバイス。 コードを読みやすくすために式に名前を付けるという意味で変数に入れるのは良い (正しくは、変数に結果を入れていますが、結果と捉えるより式と捉えるほうがわかりやすいと考え、あえて式と表現します。) 読みに…

【PHP】php.iniには設定を書かないようにしよう!【627日目】

php.iniに設定を書きたい PHPの設定を書きたい。こんなのとか extension=pdo_mysql.so とかとか。 php.iniの場所 php --ini このコマンドでファイルの位置がわかった root@xxxxxxxxxxx:/var/www# php --ini Configuration File (php.ini) Path: /usr/local/e…

【PHP】php.iniなどの設定ファイルの場所を探すコマンド【626日目】

php.iniに設定を書きたい PHPの設定を書きたい。こんなのとか extension=pdo_mysql.so とかとか。でもどこにファイルあるんだっけ。パスが知りたい。 php --ini php --ini このコマンドでわかる root@xxxxxxxxxxx:/var/www# php --ini Configuration File (p…