エンジニアのひよこ_level10

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

php

【Java】packageとimportの役割。PHPと比較【847日目】

packageとimport package item; import htmlitem.Td; public class Table { Td td = new Td(); } こんな感じに、packageとimportがある。なにするか。 importは使用するクラスの指定 ■PHPだと、 useの機能に近いもの。 import java.util.Map; import java.ut…

【SpringBoot⇔Laravel】環境構築。SpringBootを学んで、Laravelと比べてみる【837日目】

SpringBoot始めました ちょっと気になってたSpringBoot。 最近Javaが出来る人が近くに増えたので、教えてもらうことにしました! ということで、まずは環境構築をしてみました。 環境構築 やったことは、こちらの記事を参考にして始めました。 qiita.com 私…

三項演算子(x ? y : z)はこわくないヨ。便利だヨ【797日目】

三項演算子はアンチパターン? 『三項演算子』でずっと思ってるのが、 三項演算子のネストとかで『クソコードだー』ってネタにされすぎたせいで、 『よくわからないけど三項演算子は悪だ!』 『三項演算子使うのはアンチパターン!』 みたいに言う人いて悲し…

【Laravel】6.xからバージョンが進むのが早い理由と、バージョンアップのやり方【790日目】

Laravelアドベントカレンダー12日目 Laravel Advent Calendar 2019 - Qiitaの 12 日目の記事です。 先日はおかしょいさんの日本の Laravel 関連コミュニティまとめでした blog.okashoi.net さて、アドベントカレンダー12日目を取り続けてもう3年目です。 1年…

【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…